Saltar a contenido

Modelo De Datos

La entidad principal es Customer. Se persiste en MongoDB en la colección customers.

Entidad Customer

Campo Tipo Obligatoriedad Descripción
id string Sistema ID generado por MongoDB
tenantId string Obligatorio Identificador del tenant propietario
firstName string Obligatorio Nombre del cliente
lastName string Obligatorio Apellido del cliente
email string Obligatorio Email del cliente
phone string Obligatorio Teléfono
city string Obligatorio Ciudad
status active o inactive Obligatorio Estado del cliente
segment general, frequent o vip Obligatorio Segmento comercial
notes string Opcional Notas internas
totalOrders number Sistema Contador de órdenes, inicia en 0
registeredAt string Sistema Fecha de registro en ISO 8601
updatedAt string Sistema Fecha de última actualización en ISO 8601
allowCredit boolean Opcional Indica si el cliente tiene crédito permitido

Campos Obligatorios Por Operación

Creación

Campo Obligatorio Regla
tenantId Si String no vacío, máximo 80 caracteres
firstName Si String no vacío, máximo 80 caracteres
lastName Si String no vacío, máximo 80 caracteres
email Si Debe tener formato de email
phone Si String no vacío, máximo 30 caracteres
city Si String no vacío, máximo 80 caracteres
status Si Sólo active o inactive
segment Si Sólo general, frequent o vip
notes No Opcional, máximo 500 caracteres
allowCredit No Opcional; si no se envía, se guarda false

Actualización

Campo Obligatorio Regla
tenantId Si, como query param Necesario para localizar el cliente del tenant
firstName No Opcional, máximo 80 caracteres
lastName No Opcional, máximo 80 caracteres
email No Opcional; debe tener formato de email si se envía
phone No Opcional, máximo 30 caracteres
city No Opcional, máximo 80 caracteres
status No Opcional; sólo active o inactive
segment No Opcional; sólo general, frequent o vip
notes No Opcional, máximo 500 caracteres
allowCredit No Opcional

Operaciones Por ID

Las operaciones GET /customers/:id, PATCH /customers/:id/orders/increment y DELETE /customers/:id requieren tenantId como query param. Si no se envía o viene vacío, la API responde BadRequestException con el mensaje tenantId is required.

Schema Mongoose

Campos requeridos en persistencia:

  • tenantId
  • firstName
  • lastName
  • email
  • phone
  • city
  • status
  • segment
  • registeredAt
  • updatedAt
  • allowCredit

Campos con default:

Campo Default
notes ''
totalOrders 0
allowCredit false

Reglas De Normalización

En creación:

  • tenantId, firstName, lastName, phone, city y notes se guardan con trim().
  • email se guarda en minúsculas.
  • totalOrders inicia en 0.
  • registeredAt y updatedAt se asignan con la fecha actual.
  • allowCredit usa false si no se envía.

En actualización:

  • Sólo se actualizan los campos enviados.
  • Los campos string enviados se normalizan con trim().
  • email se guarda en minúsculas.
  • updatedAt se actualiza con la fecha actual.

Búsqueda

El listado por tenant acepta search. Cuando se envía, el repositorio usa una expresión regular case-insensitive sobre:

  • firstName
  • lastName
  • email
  • phone
  • city

Los resultados se ordenan por registeredAt descendente.