Files
RodoIsAlnum 10c131cd47 Final
2025-10-28 20:59:38 -06:00

99 lines
3.3 KiB
C#

using Microsoft.AspNetCore.Mvc;
using BibliotecaAPI.Data;
using BibliotecaAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace BibliotecaAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PrestamosController : ControllerBase
{
private readonly BibliotecaContext _context;
public PrestamosController(BibliotecaContext context)
{
_context = context;
}
// Crear préstamo
[HttpPost("crear")]
public async Task<ActionResult<Prestamo>> CrearPrestamo(Prestamo prestamo)
{
// 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.Copias_Disponibles--;
prestamo.Fecha_Prestamo = DateTime.Now;
prestamo.Devuelto = false;
_context.Prestamos.Add(prestamo);
await _context.SaveChangesAsync();
return Ok(prestamo);
}
// Registrar devolución
[HttpPut("devolver/{id}")]
public async Task<IActionResult> RegistrarDevolucion(int 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.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)
.Where(p => !p.Devuelto)
.ToListAsync();
}
// 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.Fecha_Prestamo).TotalDays > 10)
.ToListAsync();
}
// Historial por usuario
[HttpGet("historial/{usuarioId}")]
public async Task<ActionResult<IEnumerable<Prestamo>>> GetHistorialUsuario(int usuarioId)
{
return await _context.Prestamos
//.Include(p => p.Libro)
.Where(p => p.Id_Usuario == usuarioId)
.ToListAsync();
}
}
}