LuchoBazz / express-ts-rest-starter-kit

Express.js + Postgresql + Prisma + Typescript Starter Kit
https://luchobazz.github.io/express-ts-rest-starter-kit
MIT License
1 stars 0 forks source link

Project Structure Definition #3

Open LuchoBazz opened 7 months ago

LuchoBazz commented 7 months ago

Tasks

Tests

Future

...

Tests

Deprecated

LuchoBazz commented 1 month ago
/src
│
├── /app
│   ├── app.ts               # Configuración y arranque de la aplicación
│   ├── routes.ts            # Definición de rutas (se conecta con los controladores)
│   └── server.ts            # Configuración del servidor Express
│
├── /core                    # Dominio principal (lógica de negocio)
│   ├── /entities            # Entidades del dominio
│   │   └── user.entity.ts   # Entidad de ejemplo (User)
│   ├── /services            # Servicios que contienen la lógica de negocio
│   │   └── user.service.ts  # Servicio de ejemplo (UserService)
│   ├── /repositories        # Interfaces de persistencia (puertos)
│   │   └── user.repository.ts
│   └── /use_cases           # Casos de uso (lógica de aplicación)
│       └── create_user.use_case.ts # Caso de uso de ejemplo (Crear Usuario)
│
├── /adapters                # Adaptadores (implementaciones de puertos)
│   ├── /api                 # Adaptadores de API (controladores para la entrada/salida HTTP)
│   │   ├── user.controller.ts # Controlador para manejar requests relacionadas con usuarios
│   │   └── error.handler.ts    # Manejo de errores global
│   ├── /persistence         # Adaptadores de persistencia (implementación de interfaces de repositorios)
│   │   └── user.prisma.ts   # Implementación del repositorio usando Prisma
│   └── /mappers             # Mapeadores de datos (si es necesario para traducir entre capas)
│       └── user.mapper.ts   # Mapeador de User entre capas de datos y dominio
│
├── /infrastructure          # Configuración de infraestructura y dependencias
│   ├── /database            # Configuración de la base de datos
│   │   └── prisma.ts        # Conexión a la base de datos usando Prisma
│   ├── /http                # Configuración de Express y middlewares
│   │   └── express.ts       # Configuración de middlewares de Express
│   ├── /logger              # Logger (como Winston o similar)
│   │   └── logger.ts        # Configuración del logger
│   └── /env                 # Configuración de variables de entorno
│       └── config.ts        # Archivo de configuración de entorno
│
└── /tests                   # Pruebas unitarias e integración
    ├── /unit                # Pruebas unitarias para los servicios del dominio
    ├── /integration         # Pruebas de integración para las APIs y bases de datos
    └── /mocks               # Mock de dependencias para las pruebas

Explicación de la estructura: /app: Esta carpeta contiene el arranque de la aplicación y las rutas de Express.

/core: La capa del dominio o "núcleo", que contiene:

Entidades (/entities): Las entidades que representan los objetos de negocio. Servicios (/services): Aquí es donde va la lógica de negocio. Repositorios (/repositories): Interfaces que definen cómo interactuar con la persistencia de datos. /adapters: Aquí están los adaptadores que conectan el dominio con el mundo exterior:

API (/api): Los controladores de Express que manejan las peticiones HTTP. Persistencia (/persistence): Implementaciones concretas de los repositorios (por ejemplo, Prisma, Sequelize). Mapeadores (/mappers): Mapeadores opcionales para convertir datos entre diferentes capas. /infrastructure: Contiene configuraciones de infraestructura, como la base de datos, los logger, y cualquier configuración relacionada con la infraestructura de la aplicación.

/tests: Contiene las pruebas unitarias e integradas. Se pueden dividir en carpetas como unit (pruebas de la lógica del dominio) e integration (pruebas de la API, bases de datos, etc.).

LuchoBazz commented 1 month ago
├── /shared
│   ├── /utils
│   └── /constants