Documentation 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.
El módulo de materiales gestiona el catálogo completo de la biblioteca. Desde aquí el personal puede registrar nuevos títulos, actualizar sus datos, consultar el stock disponible y controlar el estado de circulación de cada ejemplar. El sistema actualiza el stock y el estado del material de forma automática cada vez que se crea o devuelve un préstamo.
Tipos de material
El campo tipo clasifica el formato físico del ítem catalogado. Los valores aceptados son:
| Tipo | Descripción |
|---|
LIBRO | Publicación en volumen, con ISBN opcional |
REVISTA | Publicación periódica de formato revista |
DVD | Material audiovisual en disco |
PERIODICO | Diario o publicación de actualidad |
OTRO | Cualquier otro formato no contemplado en los anteriores |
Campos del material
| Campo | Tipo | Requerido | Notas |
|---|
titulo | string | ✅ | Título del material |
isbn | string | ❌ | Código ISBN — debe ser único si se provee |
tipo | enum | ✅ | Uno de: LIBRO, REVISTA, DVD, PERIODICO, OTRO |
anioPubl | integer | ❌ | Año de publicación (entre 1000 y el año actual) |
editorial | string | ❌ | Nombre de la editorial |
descripcion | string | ❌ | Descripción o sinopsis del material |
stock | integer | ❌ | Cantidad de ejemplares disponibles; valor mínimo 1, predeterminado 1 |
estado | enum | — | Gestionado por el sistema; valores: DISPONIBLE, PRESTADO, EN_REPARACION, DADO_DE_BAJA |
autorId | integer | ✅ | ID del autor asociado (referencia a la tabla de autores) |
categoriaId | integer | ✅ | ID de la categoría asociada (referencia a la tabla de categorías) |
Estados del material
| Estado | Condición | Descripción |
|---|
DISPONIBLE | stock > 0 | Hay al menos un ejemplar disponible para préstamo |
PRESTADO | Todos los ejemplares están en préstamos activos | No quedan ejemplares disponibles |
EN_REPARACION | Asignado manualmente por el personal | El material está temporalmente fuera de circulación por mantenimiento |
DADO_DE_BAJA | Asignado manualmente por el personal | El material fue retirado definitivamente del catálogo |
Control de stock automático
El sistema actualiza el estado del material de forma transparente como parte de las operaciones de préstamo y devolución, usando transacciones de base de datos para garantizar consistencia.
Al crear un préstamo: el servicio verifica que el material tenga estado DISPONIBLE y que el número de préstamos simultáneos activos no supere el stock registrado. Si tras crear el préstamo todos los ejemplares quedan en circulación, el estado del material se actualiza a PRESTADO.
// prestamo.service.js — fragmento de create()
const prestamosConMaterial = await tx.prestamo.count({
where: { materialId: parseInt(materialId), estado: { in: ['ACTIVO', 'MORA'] } },
});
if (prestamosConMaterial >= material.stock) {
await tx.material.update({
where: { id: parseInt(materialId) },
data: { estado: 'PRESTADO' },
});
}
Al registrar una devolución: el estado del material vuelve a DISPONIBLE automáticamente, independientemente de cuántos ejemplares hayan sido devueltos.
// prestamo.service.js — fragmento de devolver()
await tx.material.update({
where: { id: prestamo.materialId },
data: { estado: 'DISPONIBLE' },
});
Operaciones disponibles
| Método | Endpoint | Descripción |
|---|
GET | /api/materiales | Lista paginada del catálogo con soporte de filtros |
GET | /api/materiales/:id | Detalle de un material, incluyendo autor, categoría y préstamos activos |
POST | /api/materiales | Registra un nuevo material en el catálogo |
PUT | /api/materiales/:id | Actualiza los datos de un material existente |
DELETE | /api/materiales/:id | Elimina un material (bloqueado si tiene préstamos activos) |
El endpoint GET /api/materiales acepta los siguientes filtros como query parameters: tipo (valor exacto del enum), estado (valor exacto del enum), autorId (entero), categoriaId (entero) y search (búsqueda parcial sobre titulo, isbn y editorial). La paginación se controla con page (predeterminado 1) y limit (predeterminado 20).Ejemplo:GET /api/materiales?tipo=LIBRO&estado=DISPONIBLE&categoriaId=3&page=1&limit=15
Authorization: Bearer <token>
Para la referencia completa del endpoint de materiales, consulta la documentación de /api/materiales.