Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Práctica 3 del Posgrado Full-Stack Web Technologies, por Ferran Bals

Proyecto: Modelo de datos para una biblioteca

Acerca del autor

Autor: Ferran Bals Moreno

Perfil de GitHub: franksparks

Descripción de la práctica realizada

Introducción

Se ha diseñado un modelo de datos para la gestión de una red de bibliotecas y los préstamos de libros a sus socios.

Diagrama del modelo de datos:

Modelo detallado por Prismaliser:

Descripción de las entidades:

  • Las bibliotecas cuentan con socios (affiliates) y libros. Una biblioteca puede tener varios socios y varios libros.
  • Un socio lo es de una biblioteca, y cuenta con x préstamos (tanto activos como inactivos).
  • Un libro se encuentra en una biblioteca y está escrito por un autor, pero puede formar parte de varios préstamos (sólo 1 de ellos activo).
  • Un autor puede haber escrito varios libros.
  • Un préstamo relaciona el socio y el libro prestado.

Notas:

  • Un socio no puede tener más de 3 libros en préstamo simultáneamente (préstamos activos).
  • Un libro en préstamo no puede ser prestado a otro socio.

Instrucciones

Para lanzar el modelo de datos debemos seguir los siguientes pasos:

  1. Clonar el repositorio

  2. Instalar las dependencias -> bun install

  3. Lanzar el contenedor de Postgres -> docker-compose -f docker/docker-compose.yml up -d

  4. Generar la base de datos mediante bun x prisma db push

  5. Poblar la base de datos -> bun x prisma db seed

    Este comando inyectará:

    • 10 socios (Affiliate)
    • 5 autores (Author)
    • 25 libros (Book)
    • 10 préstamos (Borrowing)
    • 5 bibliotecas (Library)
  6. Acceder a prisma studio -> bun x prisma studio

  7. Ejecutar los scripts proporcionados.

Descripción de los scripts proporcionados

Affiliates

  • all-affiliates.ts -> Devuelve el listado de los socios, de todas las bibliotecas.
  • find-affiliate-by-id.ts -> Búsqueda por affiliateId. Devuelve un socio.
  • find-affiliates-by-lastname.ts -> Busca socios por lastName. Devuelve una lista de socios.
  • find-affiliates-by-library-id.ts -> Devuelve el listado de los socios de una biblioteca en concreto.
  • new-affiliate.ts -> Permite introducir un nuevo socio a una biblioteca.

Authors

  • all-authors.ts -> Devuelve el listado de los autores.
  • find-author-by-id.ts -> Búsqueda por authorId. Devuelve un autor.
  • find-authors-by-lastname.ts -> Búsqueda por lastName. Devuelve una lista de autores.
  • new-author.ts -> Permite introducir un nuevo autor.

Books

  • all-books.ts -> Devuelve el listado de los libros.
  • book-availability.ts -> Dado un bookId, devuelve un booleano según si el libro está o no en préstamo.
  • find-book-by-id.ts -> Búsqueda por bookId. Devuelve un libro.
  • find-books-by-author.ts -> Búsqueda por authorId. Devuelve una lista de libros.
  • find-books-by-library.ts -> Búsqueda por libraryId. Devuelve una lista de libros.
  • find-books-by-title.ts -> Búsqueda por title. Devuelve una lista de libros.
  • new-book.ts -> Permite introducir un nuevo socio a una biblioteca.

Borrowings

  • all-active-borrowings.ts -> Devuelve el listado de préstamos activos.
  • find-active-borrowing-by-book-id.ts ->
  • find-active-borrowing-by-affiliate-id.ts -> Búsqueda por affiliateId. Devuelve el listado de préstamos activos por parte de un socio.
  • find-all-borrowings-by-affiliate-id.ts -> Búsqueda por affiliateId. Devuelve el listado de préstamos, activos o pasados, por parte de un socio.
  • new-borrowing-availability-check.ts -> Se genera un nuevo préstamo por affiliateId y bookId.
    • Se comprueba que el usuario no tenga ya 3 préstamos activos.
    • Se comprueba que el libro esté disponible.
    • Se genera el préstamo.
    • se actualiza el estado del libro a no disponible.
  • return-book.ts -> Devolución de un préstamo por bookId.
    • Se comprueba que el libro no esté disponible.
    • Se actualiza el préstamo a inactivo.
    • se actualiza el estado del libro a disponible.

Libraries

  • all-libraries.ts -> Devuelve el listado de las bibliotecas.
  • find-library-by-id.ts -> Búsqueda por libraryId. Devuelve una biblioteca.
  • find-library-by-name.ts -> Búsqueda por libraryId. Devuelve una biblioteca.
  • new-library.ts -> Permite introducir una nueva biblioteca.

Enunciado original

Modelo de Datos

En esta práctica hay que desarrollar el modelo de datos para una aplicación que resulte de tu interés. (No es necesario pensar en la autenticación aún, estudiaremos eso por separado.)

Se trata, como otras veces, de hacer un fork de este repositorio y trabajar en él.

La solución del ejercicio debe ser un proyecto Javascript con:

  • El esquema de Prisma (schema.prisma).
  • La configuración para una base de datos (con docker-compose.yml).
  • Rellenado con unos pocos datos de prueba.
  • Scripts en Typescript de demostración que hacen algunas cosas con los datos.
  • Documentación sobre cómo lanzar la base de datos y usar los scripts de demostración (sustituyendo este mismo README).

Esquema

El esquema debe tener almenos 3 entidades, pero no hay límite superior. Empieza siempre por definir las entidades más importantes, y asegúrate de que las relaciones cumplen con las necesidades que has planteado (nunca hay una única solución, cada solución tienes sus ventajas e inconvenientes, simplemente hay que ser conscientes de ellos). Luego añade entidades para hacer crecer el modelo. No intentes hacerlo todo de golpe (a no ser que ya tengas experiencia).

Rellenado de datos de prueba

Para crear los datos iniciales con los que poder hacer algo al principio se puede usar cualquier mecanismo que automatice la inserción. Se recomienda mirar la documentación sobre como usar seed.ts en Prisma, que es una manera semi-estandarizada.

About

Práctica 3: Modelo de Datos

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages