This commit is contained in:
RodoIsAlnum
2025-10-28 20:05:19 -06:00
parent aac701d2ce
commit fef5ca6aa6
22 changed files with 2868 additions and 334 deletions

View File

@@ -0,0 +1,60 @@
using Microsoft.AspNetCore.Mvc;
using BibliotecaAPI.Data;
using BibliotecaAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace BibliotecaAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class LibrosController : ControllerBase
{
private readonly BibliotecaContext _context;
public LibrosController(BibliotecaContext context)
{
_context = context;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Libro>>> GetLibros()
{
return await _context.Libros.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Libro>> GetLibro(int id)
{
var libro = await _context.Libros.FindAsync(id);
if (libro == null) return NotFound();
return libro;
}
[HttpPost]
public async Task<ActionResult<Libro>> PostLibro(Libro libro)
{
_context.Libros.Add(libro);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetLibro), new { id = libro.IdLibro }, libro);
}
[HttpPut("{id}")]
public async Task<IActionResult> PutLibro(int id, Libro libro)
{
if (id != libro.IdLibro) return BadRequest();
_context.Entry(libro).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteLibro(int id)
{
var libro = await _context.Libros.FindAsync(IdLibro);
if (libro == null) return NotFound();
_context.Libros.Remove(libro);
await _context.SaveChangesAsync();
return NoContent();
}
}
}

View File

@@ -0,0 +1,82 @@
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)
{
var libro = await _context.Libros.FindAsync(prestamo.IdLibro);
if (libro == null || libro.CopiasDisponibles <= 0)
return BadRequest("Libro no disponible.");
libro.CopiasDisponibles--;
_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).FirstOrDefaultAsync(p => p.Id == id);
if (prestamo == null) return NotFound();
prestamo.Devuelto = true;
prestamo.FechaDevolucion = DateTime.Now;
prestamo.Libro.CopiasDisponibles++;
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 15 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)
.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.IdUsuario == usuarioId)
.ToListAsync();
}
}
}

View File

@@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Mvc;
using BibliotecaAPI.Data;
using BibliotecaAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace BibliotecaAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class UsuariosController : ControllerBase
{
private readonly BibliotecaContext _context;
public UsuariosController(BibliotecaContext context)
{
_context = context;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Usuario>>> GetUsuarios()
{
return await _context.Usuarios.ToListAsync();
}
[HttpPost]
public async Task<ActionResult<Usuario>> PostUsuario(Usuario usuario)
{
_context.Usuarios.Add(usuario);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetUsuarios), new { id = usuario.IdUsuario }, usuario);
}
}
}