p3-backend-2023 by David AR
discogslite-api, es un ejercicio del Posgrado en Full-Stack Web Technologies. Se basa en la creación de una versión mínima "lite" de lo que podría ser la API de Discogs, utilizando Typescript, Express y Prisma para gestionar entidades de artistas, lanzamientos y géneros. El diseño e implementación se inspiran en el modelo y práctica presentadas en clase, por lo que sirve como una guía sólida y práctica para aquellos que están iniciándose en el desarrollo backend.
discogslite-api
├── insomnia/
│ └── insomnia.json
├── src/
│ ├── artists.ts
│ ├── artists.service.ts
│ ├── genres.ts
│ ├── genres.service.ts
│ ├── releases.ts
│ ├── releases.service.ts
│ ├── prisma-client.ts
│ ├── utils.ts
│ └── server.ts
├── prisma/
│ ├── migrations/
│ ├── albums.json
│ ├── resetDb.ts
│ ├── schema.prisma
│ └── seed.ts
├── .env.sample
├── .gitignore
├── README.md
├── docker-compose.yml
├── package-lock.json
├── package.json
└── tsconfig.json
DiscogsArtist
+----+-------+------------+------------+
| id | name | createdAt | deletedAt |
+----+-------+------------+------------+
|
| 1 n
▼
DiscogsRelease
+----+-------+-----+------------+------------+----------+--------+
| id | title | year| createdAt | deletedAt | artistId | genreId|
+----+-------+-----+------------+------------+----------+--------+
▲
| 1 n
|
DiscogsGenre
+----+-------+------------+------------+
| id | name | createdAt | deletedAt |
+----+-------+------------+------------+
-
Necesitarás tener Node.js y npm instalados en tu máquina. Puedes descargarlos desde aquí.
-
También debes tener instalado Prisma. Para instalarlo, utiliza el siguiente comando en tu terminal:
npm install @prisma/cli -g
- Necesitarás tener Docker instalado en tu máquina. Puedes descargarlo desde aquí.
-
Clona el repositorio en tu máquina local utilizando
git clone
. -
Entra en el directorio del proyecto:
cd discogslite-api
- Instala las dependencias del proyecto:
npm install
- Inicia el servicio de la base de datos con Docker Compose:
npm run docker:up
- Generar migración schema.prisma
npx prisma migrate dev
- Ejecutar seed.ts para rellenar la bbdd
npm run seed
- Iniciar el Servidor:
npm run dev
Para poner en producción tu aplicación, sigue estos pasos:
- Transpilación a código Javascript
npm run build
- Inicia el servidor en modo producción:
npm start
npm run dev
: Inicia el servidor en modo desarrollo.npm test
: Ejecuta los tests del proyecto (actualmente no se ha especificado ningún test).npm run seed
: Siembra la base de datos con datos iniciales.npm run cliente
: Inicia Prisma Studio, que es una interfaz visual para trabajar con tu base de datos.npm run reset-db
: Restablece la base de datos.npm run reload-db
: Recarga la base de datos ejecutando los comandosreset-db
yseed
.npm run prisma:generate
: Genera el cliente de Prisma.npm run prisma:migrate
: Ejecuta las migraciones de Prisma.npm start
: Inicia el servidor en modo producción.npm run prepare
: Prepara el proyecto para la producción.
-
artists.ts - todas las operaciones CRUD básicas, para manejar la creación, lectura, actualización y eliminación de artistas
-
genres.ts - todas las operaciones CRUD básicas, para manejar la creación, lectura, actualización y eliminación de géneros
-
releases.ts - todas las operaciones CRUD básicas, para manejar la creación, lectura, actualización y eliminación de lanzamientos
-
Mejorar control de entradas - errores, que el id sea númerico, rutas erroneas, también para saber lo que esta pasando (si se borra un artista, que artista se ha borrado), si se borran los lanzamientos asociados también avisar
-
Deploy Digital Ocean
- https://discogs-api.freeddns.org/
- https://discogs-api.freeddns.org/releases
- https://discogs-api.freeddns.org/releases/search/t
- https://discogs-api.freeddns.org/releases/deleted (soft delete)
- https://discogs-api.freeddns.org/artists
- https://discogs-api.freeddns.org/artists/1/releases
- https://discogs-api.freeddns.org/artists/search/t
- https://discogs-api.freeddns.org/artists/deleted (soft delete)
- https://discogs-api.freeddns.org/genres
- https://discogs-api.freeddns.org/genres/1/artists
-
Separar parte de la lógica de los controladores a los servicios
-
Soft Delete (al borrar un artista, no se borra de la bbdd, se pone un campo deletedAt con la fecha de borrado)
-
Llamadas a la API especiales como listar tal, buscar por nombre, etc