API REST desarrollada con NestJS para la gestión de restaurantes, clientes y órdenes.
Esta API permite gestionar:
- Clientes (solo mayores de edad)
- Restaurantes (con control de capacidad)
- Órdenes
- Relaciones entre clientes y restaurantes
- NestJS
- TypeScript
- PostgreSQL
- TypeORM
- Docker
- Swagger
create table clients (
id bigint primary key generated always as identity,
name text not null,
email text not null unique,
phone text not null,
age int,
constraint check_age check (age >= 18)
);
create table restaurants (
id bigint primary key generated always as identity,
name text not null,
address text not null,
capacity int not null,
constraint check_capacity check (capacity >= 0)
);
create table orders (
id bigint primary key generated always as identity,
description text not null,
client_id bigint references clients (id),
restaurant_id bigint references restaurants (id)
);
create table restaurant_clients (
id bigint primary key generated always as identity,
client_id bigint references clients (id),
restaurant_id bigint references restaurants (id)
);- Node.js (v18 o superior)
- Docker y Docker Compose
- PostgreSQL (si no se usa Docker)
- Clonar el repositorio:
git clone <repository-url>
cd restaurant-api- Instalar dependencias:
npm install- Configurar variables de entorno:
cp .env.example .env
# Editar .env con tus configuraciones# Construir y levantar contenedores
docker-compose up -d --build
# Ver logs
docker-compose logs -f# Desarrollo
npm run start:dev
# Producción
npm run build
npm run start:prodLa documentación de la API está disponible en Swagger:
http://localhost:3000/api/docs
POST /clients- Crear clienteGET /clients- Listar clientesGET /clients/:id- Obtener clientePATCH /clients/:id- Actualizar clienteDELETE /clients/:id- Eliminar cliente
POST /restaurants- Crear restauranteGET /restaurants- Listar restaurantesGET /restaurants/:id- Obtener restaurantePATCH /restaurants/:id- Actualizar restauranteDELETE /restaurants/:id- Eliminar restaurantePOST /restaurants/:id/clients/:clientId- Añadir cliente a restaurante
POST /orders- Crear ordenGET /orders- Listar órdenesGET /orders/:id- Obtener ordenPATCH /orders/:id- Actualizar ordenDELETE /orders/:id- Eliminar orden
- Clientes mayores de 18 años
- Email único por cliente
- Capacidad máxima por restaurante
- Verificación de existencia de cliente y restaurante en órdenes
# Tests unitarios
npm run test
# Tests e2e
npm run test:e2e
# Cobertura
npm run test:cov- Documentación con Swagger
- Containerización con Docker
- Validaciones de datos
- Manejo de errores personalizado
- Relaciones Many-to-Many entre clientes y restaurantes