El proyecto es funcional, pero no esta terminado, por lo que se ira actualizando con el tiempo.
Sistema de autenticación con roles de usuario y permisos de acceso. Aplicando NodeJS, Typescript y Express.
Este proyecto se inspira en la metodologia de Clean Architecture, la cual se basa en separar la aplicación en capas, de tal forma que cada capa tenga una responsabilidad única y bien definida.
Si bien no se sigue al pie de la letra la metodologia, se toman los conceptos principales para la estructura del proyecto.
El proyecto utiliza es agnostico en cuanto a la base de datos, por lo que se puede utilizar cualquier base de datos relacional o no relacional. En este caso se utiliza MongoDB.
Los repositorios se encargan de la comunicación con la base de datos, por lo que si se desea cambiar la base de datos, solo se debe cambiar la implementación de los repositorios.
Path: src/features/{app}/repositories
Antes de ejecutar el proyecto, se debe crear un archivo .env.development en la raiz del proyecto, guiarse del archivo .env.example .
Usar de preferencia pnpm como gestor de paquetes.
# Instalar dependencias
pnpm install
# Ejecutar en modo desarrollo
pnpm dev
# Ejecutar en modo producción
pnpm start
# Compilar
pnpm build
├───src
│ ├───config
│ ├───core
│ ├───enviroments
│ ├───features
│ │ ├───auth
│ │ ├───role
│ │ ├───user
│ │ ├───shared
│ ├───app.ts
│ ├───server.ts
│ ├───routes.ts
config: Configuraciones de la aplicación core: Archivos esenciales de la aplicación enviroments: Variables de entorno features: Modulos de la aplicación app.ts: Archivo principal de la aplicación server.ts: Archivo de ejecución de la aplicación routes.ts: Archivo de rutas de la aplicación
├───auth
│ ├───controllers
│ ├───services
│ ├───repositories
│ ├───interfaces
│ ├───routes
│ ├───schemas
Vamos de lo mas externo a lo mas interno.
routes: Define la ruta del modulo, aplica los middleware (auth, validate schema, validate permission) y el controlador que se encargara de manejar la petición.
controllers: Se encarga de manejar la petición, en este caso se encarga de llamar al servicio correspondiente.
services: Se encarga de la lógica de negocio, en este caso es el unico que se comunica con los repositorios correspondientes.
repositories: Se encarga de la comunicación con la base de datos.
interfaces: Define las interfaces que se utilizan en el modulo.
schemas: Define los esquemas de validación de los datos, usado actualmente para los input que recibe cada endpoint.
- express - Framework para NodeJS
- cors - Middleware para habilitar CORS
- bcryptjs - Encriptador de contraseñas
- zod - Validador de esquemas
- cookie-parser - Parseador de cookies
- helmet - Middleware para seguridad
- jsonwebtoken - Generador de tokens
- mongoose - ORM para MongoDB
Pull requests son bienvenidas. Para cambios importantes, por favor abra un issue primero para discutir lo que le gustaría cambiar.