Skip to content

Modulo superAdmin - DISTRIBUIDOR parte 3

  • A. En el modelo 'Usuario' agregue una propiedad llamada, 'asignaciones', el objetivo de la misma es guardar el _id de todas las asignaciones que se le han hecho a un usuario con role 'SUPER_ADMIN - Distribuidor'. La idea es que al loguearse el SUPER_ADMIN se pueda hacer una consulta a la db y por medio de este campo se pueda conocer todos los clientes que tiene asignado (Esta asociación la tengo planeada hacer justo en el momento en que se guarda una asignación)
  • B. Cuando el distribuidor solicita a tree-a que necesita una instancia para un cliente nuevo, el flujo es crear el cliente/empresa, se crea el usuario con role ADMIN_COMPANY para dicho cliente (Eso implica conectarse a dos bases de datos al mismo tiempo a la db de treea y a la db de la instancia del nuevo cliente), el objetivo es que ese ADMIN_COMPANY se guarde en la db del cliente.
  • C. Luego se realiza la asignación, de un select escojo el distribuidor (SuperAdmin), tambien de un select escojo el cliente o los clientes que le voy a asignar a ese distribuidor. Por debajo y de forma semi-automatica debo actualizar el modelo USER de la Treea, para guardar la referencia de la asignación en la propiedad 'asignaciones' (En este punto debo tener mucho cuidado para no sobreescribir la información)
  • D. Y por último debo tener un buen control sobre los usuarios que pertenecen a un cliente

Módulo: Role superAdmin - asignación

Notas_Importantes:

  • Desde la instancia de treea lo recomendable que se tenga un item en el menu llamado listado de clientes, donde se visualize el listado de clientes / empresas registradas (Nombre,nit,dirección,etc) y un icono para ver el detalle, al pulsarlo se vea el detalle del cliente y el Usuario o usuarios con role ADMIN_COMPANY creados. En esta vista se puede activar e inactivar dicho usuario, de tal forma que al intentar loguearse en su instancia no lo pueda hacer... OJO - la activación/inactivación se hacer por medio el campo email
  • No, la relación que se establece al crear el campo clientId en el modelo User no significa que un cliente pertenece a un usuario, sino al contrario: indica que un usuario pertenece a un cliente. (MODELO USER)

Módulo: Role superAdmin - asignación

NOTAS_IMPORTANTES:

  • Un usuario pertenece a un cliente ADMIN_COMPANY pertenece a un cliente Para hacer esto posible en el modelo usuario creamos un campo llamado clientId
  • Un cliente pertenece a un usuario SUPER_ADMIN para hacer esto posible en el modelo Client hay que crear un campo llamado userId para establecer la relación
  • Entonces, cuando digo "Cuando necesites obtener la información del cliente asociado a un usuario", me refiero a la acción de obtener los detalles completos del cliente al que pertenece un usuario específico, utilizando la relación establecida a través del campo clientId en el modelo User
  • RESUMEN: Para conocer el cliente al que pertenece un usuario con rol ADMIN_COMPANY, se necesita realizar la consulta en la db principal (instancia principal), donde se almacena la información completa de los clientes. Sin embargo, los valores de clientId necesarios para realizar esa consulta deben ser extraidos de la db secundaria, donde se encuentran los usuarios.
    • Realiza la consulta en la db secundaria para obtener los usuarios con rol 'ADMIN_COMPANY'
    • Extrae los valores de clientId de estos usuarios, que son las referencias a los clientes a los que pertenecen.
    • Consulta en la db principal: Utiliza los valores de clientId obtenidos de la db secundaria para realizar una consulta en la db principal
    • En la db principal consulta los clientes cuyos _id coincidan con los valores de clientId obtenidos.
    • Esto te permitirá obtener la información completa de los clientes a los que pertenecen los usuarios.
js
// Consulta en la base de datos secundaria
const users = await UserModel.find({ role: 'ADMIN_COMPANY' });
const clientIds = users.map(user => user.clientId);

// Consulta en la base de datos principal
const clients = await ClientModel.find({ _id: { $in: clientIds } });

// Asociación de clientes y usuarios
const usersWithClients = users.map(user => {
  const client = clients.find(client => client._id.toString() === user.clientId);
  return {
    ...user.toObject(),
    client: client
  };
});