Servicio de ejemplo con Express, Prisma (ORM), Postgres y TypeScript.
- Registrarse (como cliente)
- Hacer login (como usuario o admin)
- Poder crear reservas de coches (el recurso de ejemplo elegido).
- Se puede editar y cancelar estas reservas.
- Se puede buscar las reservas propias, o como admin, las de todos los clientes, a traves de diferentes criterios (rangos de fecha, precio, coches, texto de la descripción, etc).
- Migraciones y seeders.
- Node.js
v20
. - Docker.
- Clonar el repositorio
- Ejecutar el comando
npm install
, para instalar las dependencias. - Copiar el archivo
.env.template
como.env
, reemplazar las variables de entorno si fuese necesario.
- Seguir los pasos de instalación.
- Ejecutar el comando
docker compose up -d
para levantar una base de datos Postgres local. - Ejecutar migraciones
npm run db:migrate
(quizas debas esperar a que el servidor Postgres esté 100% levantado). - Ejecutar el comando
npm run dev
para levantar el servidor.
Para ejecutar el servicio para trabajar en el mismo, el comando npm run dev
permitirá levantar el servidor, reiniciandolo en cada cambio del mismo.
Este comando ejecuta los tests de integración y unitarios. Recordemos que para poder ejecutar los tests de integración, hay que previamente levantar una base de datos (los datos que se introducen en los tests, o para los tests, se destruyen al final de los mismos).
npm run test
npm run db:migrate
Ante cualquier cambio que se haya realizado en la base de datos (tablas, columnas, etc), se añadiran archivos .sql
que contengan esos cambios.
npm run db:seed
Si se necesitan, se pueden añadir datos de ejemplo introducidos previamente en un seeder.
npm run db:inspect
Levanta en el puerto :5555 un editor de base de datos en el navegador.
npm run build
Esto generará una carpeta dist
, que es una copia de src
pero en JavaScript. Si existen errores de tipos fallará esta compilación de forma intencionada, no debería desplegarse código con errores.
npm run start
Previamente compilado el código TypeScript.
Si quieres comprobar la estructura del código en el proyecto consulta este documento.
Para probar el API disponible, se puede utilizar la colección añadida en el repositorio.
- Hay que recordar que ciertos endpoints utilizan un token bearer, generado previamente por el endpoint de login. Una vez generado, es necesario actualizar esa cabecera
Authorization
en cada endpoint. - Lanzando el seeder se genera el usuario administrador en la base de datos con el que poder crear un token de administrador al hacer login.
- Registro y login de usuarios
- Contraseñas cifradas
- Se devuelven tokens en JWT al hacer login.
- Operaciones CRUD:
- Crear reservas como usuario.
- Fecha de reserva (inicio, fin).
- Las reservas tendran un precio computado en base a los meses reservados.
- Se debe reservar minimo por 30 días.
- Los periodos de reserva deben ser cada 30 días. Si se eligen 31 días, se reservan 2 meses (60 días).
- Editar reservas.
- No se puede editar una reserva cancelada (ni por admins).
- Cambiar fecha de reserva (debe cambiar el precio)
- Cambiar coche (debe cambiar el precio)
- "Cancelar" reservas
- Como usuario las propias.
- Como admin cualquiera.
- Crear reservas como usuario.
- Sistema de busqueda:
- Busqueda incluyente de reservas por:
- Fecha (rango)
- Precio (rango)
- Estado (cancelado o no)
- Como admin se pueden buscar todas, como usuario las propias.
- Busqueda incluyente de reservas por:
- Base de datos
- Postgres
- ORM (Prisma)
- Tests
- Implementar tests de integración
- Implementar tests unitarios
- Seguridad
- Error handling.
- Validar datos desde el exterior.
- CORS
- HTTPS
- Documentación:
- Readme
- Arquitectura
- Postman
- OpenAPI