Arquitectura
La API está organizada en capas de dominio, aplicación e infraestructura.
Módulo Principal
AppModule registra:
MongooseModule.forRoot(...)CustomersModuleAppController
La conexión a MongoDB se toma de MONGODB_URI. Los valores reales de conexión no deben documentarse ni commitearse.
Módulo Customers
CustomersModule registra el modelo Mongoose CustomerDocument sobre la colección customers y expone el controlador REST.
Providers registrados:
| Provider | Responsabilidad |
|---|---|
ICustomerRepository |
Token de inyección para el repositorio |
CustomerRepository |
Implementación Mongoose |
CreateCustomerUseCase |
Alta de clientes |
GetCustomerUseCase |
Consulta por ID y tenant |
GetCustomersByTenantUseCase |
Listado por tenant y búsqueda |
IncrementCustomerOrdersUseCase |
Incremento de totalOrders |
UpdateCustomerUseCase |
Actualización parcial |
DeleteCustomerUseCase |
Eliminación por ID y tenant |
Capas
| Capa | Ruta | Contenido |
|---|---|---|
| Dominio | src/customers/domain |
Entidad Customer e interfaz ICustomerRepository |
| Aplicación | src/customers/application/use-cases |
Casos de uso de negocio |
| Infraestructura HTTP | src/customers/infraestructure/http |
CustomersController |
| Infraestructura DTO | src/customers/infraestructure/dto |
DTOs de request y response |
| Infraestructura MongoDB | src/customers/infraestructure/moongose |
Schema Mongoose |
| Repositorio | src/customers/infraestructure/repositories |
Implementación con Mongoose |
Nota: las carpetas del código usan los nombres infraestructure y moongose; se documentan así porque son los nombres reales en el proyecto.
Flujo De Creación
POST /customersrecibeCreateCustomerDto.CustomersController.createllama aCreateCustomerUseCase.- El caso de uso normaliza campos: trim en textos y email en minúsculas.
CustomerRepository.createpersiste el documento en MongoDB.- El repositorio asigna
totalOrdersinicial en0,registeredAt,updatedAtyallowCreditpor defecto. CustomerResponse.toResponsetransforma la entidad al contrato HTTP.
Observaciones Técnicas
- La aplicación registra
ValidationPipeglobal conwhitelist,forbidNonWhitelistedytransform. - No se define prefijo global de API; las rutas cuelgan directamente de
/. tenantIdse valida explícitamente en el controlador para rutas de consulta, actualización, incremento y borrado.- No se configura CORS en
main.ts; en Lambda se agregan headers CORS a la respuesta.