Skip to main content

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 socios centraliza la gestión de los miembros de la biblioteca. Desde aquí el personal puede registrar nuevos socios, consultar su historial de préstamos, actualizar sus datos y controlar su estado de membresía. El sistema impone reglas automáticas sobre los estados para garantizar que solo los socios habilitados puedan tomar nuevos materiales en préstamo.

Campos del socio

CampoTipoRequeridoNotas
nombrestringNombre(s) del socio
apellidostringApellido(s) del socio
dnistringDocumento de identidad — debe ser único en el sistema
emailstringDirección de correo electrónico — debe ser único si se provee
telefonostringNúmero de contacto
direccionstringDomicilio del socio
fechaNacdateFecha de nacimiento en formato YYYY-MM-DD
estadoenumSe asigna automáticamente; valores: ACTIVO, SUSPENDIDO, MOROSO

Estados del socio

El campo estado define qué operaciones puede realizar un socio. El sistema lo actualiza de forma automática en respuesta a eventos de préstamo y devolución.
EstadoSignificadoPuede pedir prestado
ACTIVOSocio habilitado sin deudas ni sanciones
SUSPENDIDOBloqueado manualmente por el personal de la biblioteca
MOROSOEl sistema detectó uno o más préstamos vencidos con más de 30 días de atraso
Cascada de estados: cuando se registra la devolución de un préstamo en mora, el servicio verifica si el socio todavía tiene otros préstamos con estado MORA. Si no quedan préstamos pendientes en mora, el estado del socio vuelve automáticamente a ACTIVO. Esto se ejecuta dentro de una transacción de base de datos para garantizar consistencia.
// prestamo.service.js — fragmento de devolver()
const prestamosEnMora = await tx.prestamo.count({
  where: { socioId: prestamo.socioId, estado: 'MORA' },
});

if (prestamosEnMora === 0) {
  await tx.socio.update({
    where: { id: prestamo.socioId },
    data: { estado: 'ACTIVO' },
  });
}

Operaciones disponibles

Listar socios

GET /api/sociosDevuelve una lista paginada de socios. Acepta filtros por estado y búsqueda de texto libre (search) que opera sobre nombre, apellido, DNI y email. Cada socio incluye el conteo total de préstamos (_count.prestamos).

Ver socio

GET /api/socios/:idDevuelve el detalle completo de un socio, incluyendo sus 10 préstamos más recientes con el título del material asociado.

Ver préstamos del socio

GET /api/socios/:id/prestamosDevuelve el historial completo de préstamos del socio, ordenados por fecha descendente. Cada entrada incluye el título y tipo del material.

Crear socio

POST /api/sociosRegistra un nuevo socio. Los campos nombre, apellido y dni son obligatorios. El sistema verifica que el DNI no esté ya registrado y devuelve 409 si hay conflicto.

Editar socio

PUT /api/socios/:idActualiza los datos de un socio existente. Si se envía un dni diferente, el sistema verifica que no esté en uso por otro registro.

Eliminar socio

DELETE /api/socios/:idElimina el registro del socio de forma permanente. El sistema bloquea la operación si el socio tiene préstamos activos.

Paginación y filtros

El endpoint GET /api/socios soporta los siguientes parámetros de consulta:
ParámetroTipoPredeterminadoDescripción
pageinteger1Número de página a recuperar
limitinteger20Cantidad de registros por página
searchstringBúsqueda parcial sobre nombre, apellido, dni y email
estadostringFiltra por estado exacto: ACTIVO, SUSPENDIDO o MOROSO
La respuesta incluye un objeto meta con los campos total, page, totalPages y limit para construir la paginación en el cliente.
GET /api/socios?page=2&limit=15&search=garcia&estado=ACTIVO
Authorization: Bearer <token>
No es posible eliminar un socio que tenga préstamos con estado ACTIVO. El sistema devuelve un error 409 Conflict con el mensaje "No se puede eliminar un socio con préstamos activos". Para poder eliminar el registro, primero se deben registrar todas las devoluciones pendientes del socio.
Para la referencia completa del endpoint de socios, consulta la documentación de /api/socios.

Build docs developers (and LLMs) love