This commit is contained in:
RodoIsAlnum
2025-10-28 20:59:38 -06:00
parent fef5ca6aa6
commit 10c131cd47
329 changed files with 3454 additions and 303 deletions

View File

@@ -20,11 +20,22 @@ namespace BibliotecaAPI.Controllers
[HttpPost("crear")]
public async Task<ActionResult<Prestamo>> CrearPrestamo(Prestamo prestamo)
{
var libro = await _context.Libros.FindAsync(prestamo.IdLibro);
if (libro == null || libro.CopiasDisponibles <= 0)
// Verificar si el usuario tiene 3 o más préstamos no devueltos
var prestamosActivos = await _context.Prestamos
.Where(p => p.Id_Usuario == prestamo.Id_Usuario && !p.Devuelto)
.CountAsync();
if (prestamosActivos >= 3)
return BadRequest("El usuario ya tiene 3 préstamos activos. Debe devolver al menos uno antes de realizar un nuevo préstamo.");
var libro = await _context.Libros.FindAsync(prestamo.Id_Libro);
if (libro == null || libro.Copias_Disponibles <= 0)
return BadRequest("Libro no disponible.");
libro.CopiasDisponibles--;
libro.Copias_Disponibles--;
prestamo.Fecha_Prestamo = DateTime.Now;
prestamo.Devuelto = false;
_context.Prestamos.Add(prestamo);
await _context.SaveChangesAsync();
@@ -35,37 +46,43 @@ namespace BibliotecaAPI.Controllers
[HttpPut("devolver/{id}")]
public async Task<IActionResult> RegistrarDevolucion(int id)
{
var prestamo = await _context.Prestamos.Include(p => p.Libro).FirstOrDefaultAsync(p => p.Id == id);
var prestamo = await _context.Prestamos
//.Include(p => p.Libro) // propiedad de navegación
.FirstOrDefaultAsync(p => p.Id_Prestamo == id);
if (prestamo == null) return NotFound();
if (prestamo.Devuelto)
return BadRequest("Este préstamo ya fue devuelto.");
prestamo.Devuelto = true;
prestamo.FechaDevolucion = DateTime.Now;
prestamo.Libro.CopiasDisponibles++;
//prestamo.Libro.Copias_Disponibles++;
await _context.SaveChangesAsync();
return Ok("Devolución registrada con éxito.");
}
}
// Consultar préstamos activos
[HttpGet("activos")]
public async Task<ActionResult<IEnumerable<Prestamo>>> GetActivos()
{
return await _context.Prestamos
.Include(p => p.Libro)
.Include(p => p.Usuario)
//.Include(p => p.Libro)
//.Include(p => p.Usuario)
.Where(p => !p.Devuelto)
.ToListAsync();
}
// Consultar préstamos vencidos (más de 15 días)
// Consultar préstamos vencidos (más de 10 días)
[HttpGet("vencidos")]
public async Task<ActionResult<IEnumerable<Prestamo>>> GetVencidos()
{
var hoy = DateTime.Now;
return await _context.Prestamos
.Include(p => p.Libro)
.Include(p => p.Usuario)
.Where(p => !p.Devuelto && (hoy - p.FechaPrestamo).TotalDays > 10)
//.Include(p => p.Libro)
//.Include(p => p.Usuario)
.Where(p => !p.Devuelto && (hoy - p.Fecha_Prestamo).TotalDays > 10)
.ToListAsync();
}
@@ -74,9 +91,9 @@ namespace BibliotecaAPI.Controllers
public async Task<ActionResult<IEnumerable<Prestamo>>> GetHistorialUsuario(int usuarioId)
{
return await _context.Prestamos
.Include(p => p.Libro)
.Where(p => p.IdUsuario == usuarioId)
//.Include(p => p.Libro)
.Where(p => p.Id_Usuario == usuarioId)
.ToListAsync();
}
}
}
}