Módulos y Dominios - bootcamp-uchile-2026/grupo-2-backend GitHub Wiki
Módulos y Dominios
Esta página documenta la organización del Backend de BuenOrigen mediante dominios y módulos de NestJS.
La organización se explica a partir de las funcionalidades definidas en UX/UI y de la implementación documentada del backend hasta el 13 de octubre de 2026.
Se distinguen los módulos documentados como implementados de los dominios previstos. Una pantalla del sitemap no implica por sí misma un módulo NestJS.
Dominios Identificados
| Dominio | Módulo NestJS | Responsabilidad principal | Estado |
|---|---|---|---|
| Productos | ProductsModule |
Gestionar las funcionalidades asociadas al catálogo de productos | Implementado |
| Subcategorías | SubcategoriesModule |
Gestionar subcategorías y consultas de productos asociadas a ellas | Implementado |
| Emprendedores | EntrepreneursModule |
Gestionar la información pública de los emprendedores y sus productos | Implementado |
| Favoritos | FavoritesModule |
Gestionar los productos guardados como favoritos | Pendiente |
| Usuarios | UsersModule |
Gestionar usuarios, perfiles y funcionalidades asociadas a sus cuentas | Pendiente |
| Carrito | CartModule |
Gestionar los productos y cantidades incorporados al carrito | Pendiente |
| Artículos | ArticlesModule |
Gestionar los contenidos publicados en el blog | Pendiente |
| Autenticación y registro | Sin módulo definido (dominio conceptual) | Identificación, creación de cuentas y mecanismos de acceso | Identificado en UX/UI; implementación por comprobar |
| Direcciones | Sin módulo definido (dominio conceptual) | Mantener direcciones asociadas a cuentas de compradores | Pendiente de definición e implementación |
| Pedidos y compras | Sin módulo definido (dominio conceptual) | Registrar y consultar compras, pedidos y su seguimiento | Pendiente de definición e implementación |
| Devoluciones y reembolsos | Sin módulo definido (dominio conceptual) | Solicitudes y seguimiento de devoluciones o reembolsos | Pendiente de definición e implementación |
| Puntos Verdes | Sin módulo definido (dominio conceptual) | Consulta y administración de puntos o beneficios verdes | Pendiente de definición e implementación |
| Pagos y métodos de pago | Sin módulo definido (dominio conceptual) | Métodos y operaciones de pago asociados a compras | Pendiente de definición e implementación |
| Envíos | Sin módulo definido (dominio conceptual) | Información de despacho y entrega de pedidos | Pendiente de definición e implementación |
| Gestión del emprendedor | Sin módulo independiente definido | Dashboard, edición de perfil privado, productos y ventas | Identificado en UX/UI; alcance por definir |
| Reseñas, métricas, facturación e inbox | Sin módulo independiente definido | Funciones complementarias de la cuenta de emprendedor | Identificado en antecedentes del sitemap; alcance por definir |
La estructura podrá continuar evolucionando a medida que se incorporen nuevas funcionalidades de BuenOrigen.
Productos
Módulo
ProductsModule
Estado
Implementado
Responsabilidades
El módulo concentra las funcionalidades relacionadas con la consulta y representación de productos del catálogo de BuenOrigen.
Actualmente considera:
- Búsqueda de Productos
- Carrusel de Ofertas
- Productos más Populares
- Novedades o Nuevos Productos
- Detalle de Producto
- Huella Verde del Producto
- Valoraciones de Producto
- Productos Relacionados
También proporciona operaciones relacionadas con productos que pueden ser reutilizadas por otros dominios, como la obtención de productos asociados a un emprendedor.
Estructura Actual
ProductsModule
├── ProductsController
└── ProductsService
Los modelos y DTOs asociados se encuentran organizados en src/models/ y src/dto/.
Operaciones principales
ProductsService concentra las consultas del catálogo necesarias para búsqueda, ofertas, productos más vendidos, novedades, detalle, Huella Verde, valoraciones y relacionados. También proporciona consultas reutilizables de productos por emprendedor.
Para los nombres exactos de los métodos, consultar el archivo vigente products.service.ts, ya que la firma de los métodos debe corresponder al código y no a una traducción de la documentación anterior.
Relación con otros módulos
ProductsService es exportado por ProductsModule para permitir su utilización desde otros módulos.
Actualmente:
ProductsModule
|
| exports
v
ProductsService
|
| utilizado por
v
EntrepreneursModule
Esto permite reutilizar la lógica de productos sin duplicar los datos o las operaciones dentro de EntrepreneursService.
Subcategorías
Módulo
SubcategoriesModule
Estado
Implementado
Responsabilidades
El módulo gestiona las funcionalidades relacionadas con las subcategorías del catálogo y la consulta de productos asociados a ellas.
Actualmente considera:
Estructura Actual
SubcategoriesModule
├── SubcategoriesController
└── SubcategoriesService
Operaciones Implementadas
El módulo permite realizar las siguientes operaciones principales:
Obtener las subcategorías asociadas a una categoría
Obtener los productos asociados a una subcategoría
Obtener los productos populares de una subcategoría
Los endpoints asociados se encuentran documentados en Endpoints.
Relación entre Categorías y Subcategorías
Actualmente la consulta de subcategorías pertenecientes a una categoría se gestiona mediante este módulo:
GET /categorias/:categoriaId/subcategorias
Por lo tanto, aunque existe el concepto de Categoria, actualmente no se ha definido un CategoriesModule (hipotético) independiente.
La necesidad de crear un módulo específico para Categorías podrá evaluarse si aparecen nuevas responsabilidades propias de dicho dominio.
Emprendedores
Módulo
EntrepreneursModule
Estado
Implementado
Responsabilidades
El módulo gestiona la información pública de los emprendedores registrados en BuenOrigen.
Actualmente considera:
Estructura Actual
EntrepreneursModule
├── EntrepreneursController
└── EntrepreneursService
Los modelos y DTOs se encuentran organizados en src/models/ y src/dto/. La representación resumida de productos utiliza el contrato ProductSummaryDto, compartido con las consultas del catálogo.
Operaciones principales
El servicio de emprendedores atiende el listado público, el detalle público por identificador y la consulta de productos asociados. La búsqueda de productos se delega al servicio del catálogo para no duplicar datos ni reglas de negocio.
Relación con Productos
Un emprendedor puede poseer múltiples productos.
Conceptualmente:
Emprendedor
|
| 1
|
| N
v
Producto
Cada producto incorpora:
entrepreneurId: number;
para identificar al emprendedor al cual pertenece.
Para obtener sus productos, EntrepreneursService utiliza ProductsService.
EntrepreneursController
|
v
EntrepreneursService
|
v
ProductsService
|
v
ProductSummaryDto[]
Favoritos
Módulo conceptual (no confirmado como implementado)
FavoritesModule
Estado
Pendiente de implementación
Responsabilidades
Gestionar la relación entre el usuario y los productos almacenados como favoritos.
Funcionalidad asociada:
Actualmente se han identificado las siguientes operaciones:
- Consultar favoritos.
- Agregar un producto a favoritos.
- Eliminar un producto de favoritos.
Posible organización (referencial)
FavoritesModule
├── FavoritesController
└── FavoritesService
Operaciones identificadas
Las operaciones planteadas en esta sección son requerimientos funcionales, no métodos confirmados del repositorio. Su contrato se definirá al implementarse.
Los contratos preliminares se encuentran documentados en Endpoints y DTOs.
Usuarios
Módulo conceptual (no confirmado como implementado)
UsersModule
Alcance documental
Los módulos y contratos específicos de clientes o usuarios deben comprobarse en la versión vigente de develop, ya que el documento original antecede a cambios de integración de clientes. No se deben inferir endpoints privados de autenticación o perfil a partir del sitemap.
Responsabilidades
Gestionar la información asociada a los usuarios y sus cuentas dentro de BuenOrigen.
Entre las funcionalidades identificadas se encuentran:
A partir del sitemap también se han identificado futuras responsabilidades relacionadas con:
- Datos de cuenta.
- Direcciones.
- Compras.
- Devoluciones.
- Puntos Verdes.
- Roles de usuario.
Posible organización (referencial)
UsersModule
├── UsersController
└── UsersService
Pendiente de definición: determinar qué funcionalidades pertenecerán directamente a
UsersModuley cuáles requerirán módulos independientes, por ejemplo Autenticación, Pedidos o Direcciones.
Carrito
Módulo conceptual (no confirmado como implementado)
CartModule
Estado
Pendiente de implementación
Responsabilidades
Gestionar el estado del carrito de compras y los productos incorporados durante el proceso de compra.
Funcionalidad asociada:
Actualmente considera:
- Consultar el carrito.
- Agregar productos.
- Actualizar cantidades.
- Eliminar productos.
Posible organización (referencial)
CartModule
├── CartController
└── CartService
Operaciones identificadas
Las operaciones planteadas en esta sección son requerimientos funcionales, no métodos confirmados del repositorio. Su contrato se definirá al implementarse.
Los DTO preliminares asociados al carrito se encuentran definidos en DTOs.
Artículos
Módulo conceptual (no confirmado como implementado)
ArticlesModule
Estado
Pendiente de implementación
Responsabilidades
Gestionar los contenidos publicados en el blog de BuenOrigen.
Funcionalidad asociada:
Actualmente se identifica la consulta pública de artículos. El nombre del método y sus parámetros deberán definirse con la implementación.
Posible organización (referencial)
ArticlesModule
├── ArticlesController
└── ArticlesService
A partir del sitemap podrán incorporarse posteriormente funcionalidades relacionadas con:
- Noticias.
- Consejos o Tips.
- Ideas.
- Detalle de artículo.
Pendientes funcionales identificados en UX/UI
Además de Favoritos, Carrito y Artículos, los antecedentes compartidos del wireframe y sitemap contemplan funcionalidades de las cuentas de compradores y emprendedores que todavía no están desarrolladas como dominios independientes en esta documentación.
Las siguientes agrupaciones son propuestas de responsabilidad de negocio, no una instrucción de crear un módulo por cada pantalla ni una afirmación de que existan clases o endpoints:
| Área UX/UI | Funcionalidades identificadas | Posible responsabilidad backend | Situación documental |
|---|---|---|---|
| Cuenta de usuario | Registro de Usuario, Autenticación, Perfil de Usuario | Cuentas, identidad, información del perfil y permisos | Revisar el soporte vigente de clientes; autenticación no confirmada |
| Cuenta de usuario | Direcciones | Dirección de contacto, despacho y asociación con cuenta | Pendiente |
| Cuenta de usuario | Mis Compras | Historial y detalle de pedidos o compras | Pendiente |
| Cuenta de usuario | Devoluciones | Solicitudes de devolución y seguimiento | Pendiente |
| Cuenta de usuario | Puntos Verdes | Saldo, movimientos o beneficios, según definición de producto | Pendiente de reglas de negocio |
| Compra | Métodos de pago y pagos | Registro de información necesaria para el pago, según definición posterior | Pendiente de reglas y contratos |
| Compra | Envíos | Datos de entrega y seguimiento, si el flujo de compra lo requiere | Pendiente de definición |
| Cuenta de emprendedor | Dashboard del Emprendedor | Resúmenes e indicadores privados | Pendiente |
| Cuenta de emprendedor | Perfil del Emprendedor | Consulta y edición de información privada del emprendimiento | Pendiente |
| Cuenta de emprendedor | Mis Productos | Gestión de catálogo propio por emprendedor | Pendiente |
| Cuenta de emprendedor | Mis Ventas | Consulta y administración de ventas | Pendiente |
| Cuenta de emprendedor | Métricas, reseñas, facturación, devoluciones/reembolsos e inbox | Funciones administrativas identificadas en antecedentes del sitemap | Pendiente de definición |
| Contenido | Artículos de nuestro Blog | Consulta y publicación de contenido editorial | Pendiente |
Criterios para convertir estos pendientes en módulos
- Revisar si las operaciones ya están cubiertas por un módulo existente, especialmente clientes/usuarios, productos y emprendedores.
- Definir reglas de negocio, propiedad de los datos y operaciones antes de crear controllers, services o DTOs.
- Evitar replicar un módulo por cada componente visual del wireframe.
- Registrar cualquier desarrollo nuevo en el backlog y comprobar que no exista un issue equivalente.
- Incorporar a Endpoints y DTOs solamente los contratos efectivamente definidos, distinguiendo propuestas de implementaciones.
Relación conceptual entre áreas
flowchart TD
UX["Wireframes y sitemap UX/UI"] --> PUBLIC["Catálogo público"]
UX --> BUYER["Cuenta de comprador"]
UX --> SELLER["Cuenta de emprendedor"]
PUBLIC --> PROD["ProductsModule"]
PUBLIC --> SUB["SubcategoriesModule"]
PUBLIC --> ENT["EntrepreneursModule"]
BUYER -. "Por definir" .-> ACCOUNT["Cuentas, carrito, favoritos, pedidos, pagos y devoluciones"]
SELLER -. "Por definir" .-> ADMIN["Perfil privado, productos, ventas y dashboard"]
La representación es conceptual: los nodos de áreas pendientes no equivalen a módulos implementados.
Organización General Actual
Los módulos de catálogo que se documentan en esta página son:
AppModule
│
├── ProductsModule
├── SubcategoriesModule
└── EntrepreneursModule
Los demás dominios se incorporan según las decisiones del equipo y las necesidades de la API. Esta enumeración no reemplaza la revisión de AppModule, particularmente para componentes de clientes o usuarios incorporados en otros cambios.
Conceptualmente, la arquitectura proyectada podrá evolucionar hacia:
AppModule
│
├── ProductsModule
├── SubcategoriesModule
├── EntrepreneursModule
├── FavoritesModule
├── UsersModule
├── CartModule
└── ArticlesModule
Organización de Modelos y DTOs
Como resultado de la normalización del código, los modelos y DTOs utilizan nombres en inglés y se organizan en directorios independientes.
src/
├── models/
│ ├── product.model.ts
│ ├── entrepreneur.model.ts
│ └── ...
├── dto/
│ ├── product-summary.dto.ts
│ ├── product-search.dto.ts
│ ├── product-detail.dto.ts
│ └── ...
├── productos/
├── subcategorias/
├── emprendedores/
├── common/
├── app.module.ts
└── main.ts
La estructura es ilustrativa, no un inventario exhaustivo de archivos. Para conocer las clases, propiedades y contratos precisos, consultar el código integrado en develop y la página DTOs.
Las rutas HTTP pueden conservar su nomenclatura en español aun cuando las clases, DTOs y propiedades internas se encuentren nombrados en inglés.
Relación entre Funcionalidades y Módulos
| Funcionalidad | Dominio / Módulo | Estado |
|---|---|---|
| Búsqueda de Productos | ProductsModule |
Implementado |
| Carrusel de Ofertas | ProductsModule |
Implementado |
| Productos más Populares | ProductsModule |
Implementado |
| Novedades o Nuevos Productos | ProductsModule |
Implementado |
| Detalle de Producto | ProductsModule |
Implementado |
| Huella Verde del Producto | ProductsModule |
Implementado |
| Valoraciones de Producto | ProductsModule |
Implementado |
| Productos Relacionados | ProductsModule |
Implementado |
| Subcategorías Existentes | SubcategoriesModule |
Implementado |
| Productos por Subcategoría | SubcategoriesModule |
Implementado |
| Productos más Populares por Subcategoría | SubcategoriesModule |
Implementado |
| Nuestros Emprendedores | EntrepreneursModule |
Implementado |
| Perfil de Emprendedor | EntrepreneursModule |
Implementado |
| Productos del Emprendedor | EntrepreneursModule / ProductsModule |
Implementado |
| Favoritos | FavoritesModule |
Pendiente |
| Perfil de Usuario | Usuarios / clientes: verificar contrato vigente | Por comprobar |
| Autenticación | Identificación / autorización | Sin contrato confirmado |
| Carrito de Compras | CartModule |
Pendiente |
| Artículos de nuestro Blog | ArticlesModule |
Pendiente |
| Registro de Usuario | Cuentas / autenticación por definir | Por comprobar |
| Direcciones | Direcciones / cuenta de usuario | Pendiente |
| Mis Compras | Pedidos / compras | Pendiente |
| Devoluciones | Devoluciones / pedidos | Pendiente |
| Puntos Verdes | Beneficios / cuenta de usuario | Pendiente |
| Dashboard del Emprendedor | Administración del emprendedor | Pendiente |
| Perfil del Emprendedor | Administración del emprendedor | Pendiente |
| Mis Productos | Productos / emprendedores | Pendiente |
| Mis Ventas | Ventas / pedidos | Pendiente |
Relación entre Módulos
Los módulos pueden utilizar servicios proporcionados por otros módulos cuando una funcionalidad cruza responsabilidades de dominio.
La relación documentada para la consulta de productos de un emprendedor es:
EntrepreneursModule
|
| imports
v
ProductsModule
|
| exports
v
ProductsService
Esto permite que:
GET /emprendedores/:emprendedorId/productos
pueda ser recibido por EntrepreneursController, mientras que la lógica de búsqueda de productos permanece dentro de ProductsService.
De esta forma se evita duplicar responsabilidades entre servicios.
Crear un Módulo
Que una funcionalidad aparezca en el sitemap o en Frontend no implica automáticamente que deba existir un módulo Backend independiente.
La creación de un módulo deberá evaluarse principalmente según:
- Responsabilidad de negocio propia.
- Datos o modelos que administra.
- Reglas de negocio específicas.
- Operaciones que expone.
- Necesidad de encapsular servicios relacionados.
Por ejemplo:
Productos
|
v
Muchas operaciones y reglas propias
|
v
ProductsModule
Mientras que una sección exclusivamente visual de Frontend podría no requerir un módulo Backend específico.
Referencias de documentación
- Funcionalidades Backend
- Servicios de la API
- Endpoints
- DTOs
- OpenAPI y Swagger
- Componentes Transversales
- Instalación y Configuración Local
- Docker
- Despliegue
La descripción de arquitectura corresponde a los antecedentes disponibles hasta el 13 de octubre de 2026. Los nombres y contratos específicos que no se han contrastado directamente con los archivos más recientes se presentan como referencias conceptuales, no como garantías de implementación.
Componentes transversales
Además de los módulos de negocio, el backend incorpora componentes compartidos para el tratamiento de solicitudes HTTP. La trazabilidad mediante middleware, la gestión de excepciones y la validación de contratos REST forman parte del trabajo integrado hasta el 13 de octubre de 2026.
Estos componentes no deben representarse como dominios comerciales independientes; se documentan de forma transversal en Componentes Transversales.