API REST para gestión de invitados y invitaciones de boda, construida con Fastify, TypeScript, Prisma y PostgreSQL.
- Node.js + Fastify - Framework web rápido y ligero
- TypeScript - Tipado estático
- Prisma ORM - ORM moderno para PostgreSQL
- PostgreSQL - Base de datos
- TypeBox - Validación de esquemas JSON
- Swagger/OpenAPI - Documentación automática de API
Arquitectura limpia con separación de responsabilidades:
src/
├── config/ # Configuración (env, swagger)
├── plugins/ # Plugins de Fastify (prisma, error-handler)
├── modules/
│ ├── invitations/ # Módulo de invitaciones
│ │ ├── invitation.schema.ts # Validaciones TypeBox
│ │ ├── invitation.repository.ts # Acceso a datos (Prisma)
│ │ ├── invitation.service.ts # Lógica de negocio
│ │ ├── invitation.controller.ts # Controladores HTTP
│ │ └── invitation.routes.ts # Definición de rutas
│ └── guests/ # Módulo de invitados
└── types/ # Definiciones de tipos TypeScript
- Clonar el repositorio
- Instalar dependencias:
npm install- Crear archivo
.envbasado en.env.example:
cp .env.example .env-
Configurar la variable
DATABASE_URLen.envcon la conexión a PostgreSQL -
Generar el cliente de Prisma:
npm run prisma:generate- Ejecutar migraciones:
npm run prisma:migratenpm run dev- Inicia el servidor en modo desarrollo con hot-reloadnpm run build- Compila el proyecto TypeScriptnpm start- Inicia el servidor en producciónnpm run prisma:generate- Genera el cliente de Prismanpm run prisma:migrate- Ejecuta migraciones de base de datosnpm run prisma:studio- Abre Prisma Studio para gestionar la BD
POST /api/v1/invitations- Crear invitaciónGET /api/v1/invitations- Listar invitacionesGET /api/v1/invitations/:id- Obtener invitación por IDPUT /api/v1/invitations/:id- Actualizar invitaciónDELETE /api/v1/invitations/:id- Eliminar invitación
POST /api/v1/guests- Crear invitadoGET /api/v1/guests- Listar invitadosGET /api/v1/guests?invitationId=<uuid>- Listar invitados por invitaciónGET /api/v1/guests/:id- Obtener invitado por IDPUT /api/v1/guests/:id- Actualizar invitadoDELETE /api/v1/guests/:id- Eliminar invitado
Una vez iniciado el servidor, la documentación interactiva de Swagger está disponible en:
http://localhost:3000/docs
- Validación estricta de entrada/salida con TypeBox
- Documentación OpenAPI generada automáticamente
- Manejo de errores centralizado
- Logs estructurados con Pino
- CORS y Helmet configurados
- Graceful shutdown
- Arquitectura escalable y mantenible