Tengo dos modelos separados, nombre de empleado y usuario con algunos datos comunes y un ID de cuenta para vincularse entre sí. Un registro para cada modelo es el siguiente:
Employee _id:1639137618164 name:"*****" sites:Array company:”Software” jobTitle: “Associate Software Engineer” email:"*****" phonesms:"1" phonevoice:"1" licenseNumber:"" avatarStamp:0 pined:false accountId: 1639129314021 //link attribute countryCodeSms:"US" countryCodeVoice:"US" inviteCode:"09611" emergencyRoles: Object invite: "booksRbUoSM"y para el usuario es
_id:1639129314021 firstName:"*** ***" lastName:"****" companyName:"SITS" passwordReset:"" activated:true accountId:1639129314021 // link attribute siteId:-1 role:0 last:1639137913873 blocked:false blockedtext:"" trialend:1640338913781 paytype:1 hashAccess:Array emergencyEnabled:false visitorTypes:Array sitesLimit:2 manualCreation:false username:"*************" password:"**********************************" email:"*********************" passwordNotification:true passwordLifecycle:1646906375986 isNewUser:true listFeature:ObjectQuiero buscar desde el modelo de usuario si existe algún empleado con ese identificador de cuenta o no, si hay un empleado asociado con el identificador de cuenta, luego agregar un nuevo empleado con los datos comunes disponibles. de otra forma no. ¿Cómo puedo hacer esto en bucle invertido? ¡Estoy atrapado aquí!
Estoy usando loopback versión 2.xx Resulta ser muy simple
currentModel.app.models.modelYouWantToAccessPrueba con abajo
var employee_data = Employee .filter(x => User.map(y => y.accountId).includes(x.accountId));En bucle invertido 4
En su controlador de usuario donde tiene acceso al UserRepository
Suponiendo que conoce el ID de cuenta y el ID de cuenta solo existe si tiene un registro de empleado, puede tener un método
@get('/users/{accountId}) async findUserWhoIsAnEmployee(@param.path.string('accountId') accountId: string){ return this.userRepository.findOne({where: {accountId}}) }Suponiendo que no conoce el ID de cuenta...
Puede acceder al repositorio de empleados en su UserController pasándolo como un argumento en la función constructora y encontrando al usuario, luego verificando el registro de Empleado. (No es óptimo ya que se realizarán dos consultas en su base de datos)
export class UserController{ constructor( @repository(UserRepository) public userRepository: UserRepository, @repository(EmployeeRepository) private employeeRepository: EmployeeRepository ) // returns employee record or null if none @get('/users/{id}/employee-record) async findUserWhoIsAnEmployee(@param.path.string('id') id: string){ const user = await this.userRepository.findById(id); return (!user) ? null : this.employeeRepository.findOne({where: {accountId: user.accountId}}) } }Donde tenga una relación entre el Modelo de Usuario y Empleado ( preferiblemente hasOne )
Puede encontrar ese registro de empleado en el usuario
// returns employee record of a user if exists @get('/users/{id}) async findUserWhoIsAnEmployee(@param.path.string('id') id: string){ return this.userRepository.findById(id).employeeRecord() } //Where employeeRecord is a reference property on the user Model.