La base de datos del sistema utiliza MySQL 8 como motor relacional y Prisma ORM como capa de acceso a datos. Todos los nombres de tablas y columnas están mapeados al español mediante las directivasDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/camiloivcode/biblioteca-la-palabra/llms.txt
Use this file to discover all available pages before exploring further.
@@map y @map del schema. El esquema se sincroniza con la base de datos usando db push en lugar de migraciones versionadas (el directorio migrations/ está en .gitignore).
Modelos y relaciones
El diagrama de relaciones entre entidades es el siguiente:| Modelo | Tabla | Descripción |
|---|---|---|
User | users | Usuarios del sistema con rol ADMIN o BIBLIOTECARIO |
Socio | socios | Socios registrados de la biblioteca |
Autor | autores | Autores de los materiales del catálogo |
Categoria | categorias | Categorías temáticas con icono configurable |
Material | materiales | Catálogo de materiales: libros, revistas, DVD, etc. |
Prestamo | prestamos | Préstamos de materiales a socios con fechas y estado |
Int @id @default(autoincrement())), y la mayoría incluyen timestamps created_at y updated_at gestionados automáticamente por Prisma.
Enums
El schema define cinco enumeraciones que controlan los estados y tipos posibles en el sistema:| Enum | Valores | Usado en |
|---|---|---|
Role | ADMIN, BIBLIOTECARIO | User.role |
EstadoSocio | ACTIVO, SUSPENDIDO, MOROSO | Socio.estado |
EstadoMaterial | DISPONIBLE, PRESTADO, EN_REPARACION, DADO_DE_BAJA | Material.estado |
EstadoPrestamo | ACTIVO, DEVUELTO, MORA | Prestamo.estado |
TipoMaterial | LIBRO, REVISTA, DVD, PERIODICO, OTRO | Material.tipo |
Schema Prisma
El schema completo define los generadores, el datasource y los seis modelos de la aplicación:Reglas de negocio
Todas las reglas se aplican en la capa de servicios del backend, antes de ejecutar cualquier operación sobre la base de datos.Préstamos
Préstamos
- Máximo 3 préstamos activos por socio. Intentar crear un cuarto préstamo activo devuelve error
400. - Un socio en estado
MOROSOno puede tomar nuevos préstamos hasta que regularice su situación. - Los préstamos con más de 30 días de retraso pasan automáticamente al estado
MORAcuando se consultan o actualizan. - No se puede prestar un material con
stockigual a0o cuyo estado sea distinto deDISPONIBLE.
Materiales
Materiales
- Al registrar un préstamo: se decrementa el
stockdel material (stock--). Si el stock llega a0, el estado del material cambia aPRESTADO. - Al registrar una devolución: se incrementa el
stock(stock++). Si el stock vuelve a ser mayor que0, el estado cambia aDISPONIBLE.
Eliminaciones
Eliminaciones
- No se puede eliminar un autor que tenga materiales asociados en el catálogo.
- No se puede eliminar un socio que tenga préstamos activos pendientes de devolución.
- No se puede eliminar una categoría que tenga materiales asociados en el catálogo.
Gestión del schema
Dado que el proyecto usadb push en lugar de migraciones, el flujo de trabajo para modificar el schema es:
- Editar
backend/prisma/schema.prisma. - Regenerar el cliente Prisma con los nuevos tipos:
- Sincronizar el schema con la base de datos (aplica los cambios directamente):
- Opcionalmente, repoblar la base de datos con datos de prueba:
upsert() internamente, por lo que puede ejecutarse múltiples veces sin generar registros duplicados.
Datos del seed
Al ejecutardb:seed, se insertan los siguientes datos iniciales:
| Entidad | Cantidad | Detalle |
|---|---|---|
| Usuarios | 2 | 1 ADMIN + 1 BIBLIOTECARIO |
| Categorías | 6 | Literatura, Historia, Ciencias, Filosofía, Arte, Tecnología |
| Autores | 5 | García Márquez, Borges, Allende, Vargas Llosa, Cortázar |
| Socios | 3 | María González, Carlos López, Ana Martínez |
| Materiales | 2 | Cien Años de Soledad, Ficciones |
| Rol | Contraseña | |
|---|---|---|
ADMIN | admin@biblioteca.com | Admin2024! |
BIBLIOTECARIO | bibliotecario@biblioteca.com | Biblio2024! |