Coder Social home page Coder Social logo

api-demo's Introduction

api-demo

Servicio de ejemplo con Express, Prisma (ORM), Postgres y TypeScript.

Funcionalidades:

  • 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.

Indice

Como usar

Prerequisitos

  • Node.js v20.
  • Docker.

Instalación

  1. Clonar el repositorio
  2. Ejecutar el comando npm install, para instalar las dependencias.
  3. Copiar el archivo .env.template como .env, reemplazar las variables de entorno si fuese necesario.

Como desarrollar

  1. Seguir los pasos de instalación.
  2. Ejecutar el comando docker compose up -d para levantar una base de datos Postgres local.
  3. Ejecutar migraciones npm run db:migrate (quizas debas esperar a que el servidor Postgres esté 100% levantado).
  4. Ejecutar el comando npm run dev para levantar el servidor.

Comandos utiles

Modo desarrollo

Para ejecutar el servicio para trabajar en el mismo, el comando npm run dev permitirá levantar el servidor, reiniciandolo en cada cambio del mismo.

Lanzar los tests

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

Base de datos

Lanzar migraciones
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.

Hidratar la base de datos
npm run db:seed

Si se necesitan, se pueden añadir datos de ejemplo introducidos previamente en un seeder.

Inspeccionar la base de datos
npm run db:inspect

Levanta en el puerto :5555 un editor de base de datos en el navegador.

Compilar TypeScript

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.

Ejecutar producción

npm run start

Previamente compilado el código TypeScript.

Arquitectura

Si quieres comprobar la estructura del código en el proyecto consulta este documento.

Postman

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.

Roadmap

  • 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.
  • 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.
  • 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

api-demo's People

Contributors

enriquebv avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.