MODELS AND CONTROLLERS
This commit is contained in:
@@ -1,13 +1,17 @@
|
|||||||
|
using BibliotecaAPI.Data;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
// Add services to the container.
|
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
|
||||||
|
builder.Services.AddControllers();
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen();
|
builder.Services.AddSwaggerGen();
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Activar Swagger para probar endpoints
|
||||||
if (app.Environment.IsDevelopment())
|
if (app.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
@@ -15,30 +19,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
}
|
}
|
||||||
|
|
||||||
app.UseHttpsRedirection();
|
app.UseHttpsRedirection();
|
||||||
|
app.UseAuthorization();
|
||||||
|
app.MapControllers();
|
||||||
|
|
||||||
var summaries = new[]
|
app.Run();
|
||||||
{
|
|
||||||
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
|
|
||||||
};
|
|
||||||
|
|
||||||
app.MapGet("/weatherforecast", () =>
|
|
||||||
{
|
|
||||||
var forecast = Enumerable.Range(1, 5).Select(index =>
|
|
||||||
new WeatherForecast
|
|
||||||
(
|
|
||||||
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
|
|
||||||
Random.Shared.Next(-20, 55),
|
|
||||||
summaries[Random.Shared.Next(summaries.Length)]
|
|
||||||
))
|
|
||||||
.ToArray();
|
|
||||||
return forecast;
|
|
||||||
})
|
|
||||||
.WithName("GetWeatherForecast")
|
|
||||||
.WithOpenApi();
|
|
||||||
|
|
||||||
app.Run();
|
|
||||||
|
|
||||||
record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
|
|
||||||
{
|
|
||||||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
|
||||||
}
|
|
||||||
@@ -13,10 +13,10 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("BibliotecaDigitalApi")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("BibliotecaDigitalApi")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7b037ee7692fed1179b172f2163d0f866cb8e57d")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("BibliotecaDigitalApi")]
|
[assembly: System.Reflection.AssemblyProductAttribute("BibliotecaDigitalApi")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("BibliotecaDigitalApi")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("BibliotecaDigitalApi")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
||||||
// Generated by the MSBuild WriteCodeFragment class.
|
// Generado por la clase WriteCodeFragment de MSBuild.
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6ed0a80a11b43174ad50914035db8ef21ed9a2256f21b1d4e57a6b5c8f6a8e18
|
fe9b27aa300c3789229c7b6b1cb8aa68e1db82d30fd78e439c90942c46816c80
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")]
|
||||||
|
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")]
|
||||||
|
|
||||||
|
// Generado por la clase WriteCodeFragment de MSBuild.
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
90de409f17a71d4aa851b14ec70bdf8c6d47c7ea53281b0480308c94120b5983
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.csproj.AssemblyReference.cache
|
||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.GeneratedMSBuildEditorConfig.editorconfig
|
||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.AssemblyInfoInputs.cache
|
||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.AssemblyInfo.cs
|
||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.csproj.CoreCompileInputs.cache
|
||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.MvcApplicationPartsAssemblyInfo.cs
|
||||||
|
C:\Users\CHIOH\source\repos\BibliotecaDigital\BibliotecaDigitalApi\obj\Debug\net8.0\BibliotecaDigitalApi.MvcApplicationPartsAssemblyInfo.cache
|
||||||
14
Models/BibliotecaContext.cs
Normal file
14
Models/BibliotecaContext.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using BibliotecaAPI.Models;
|
||||||
|
|
||||||
|
namespace BibliotecaAPI.Data
|
||||||
|
{
|
||||||
|
public class BibliotecaContext : DbContext
|
||||||
|
{
|
||||||
|
public BibliotecaContext(DbContextOptions<BibliotecaContext> options) : base(options) { }
|
||||||
|
|
||||||
|
public DbSet<Libro> Libros { get; set; }
|
||||||
|
public DbSet<Usuario> Usuarios { get; set; }
|
||||||
|
public DbSet<Prestamo> Prestamos { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
16
Models/Libro.cs
Normal file
16
Models/Libro.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace BibliotecaAPI.Models
|
||||||
|
{
|
||||||
|
public class Libro
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Titulo { get; set; } = string.Empty;
|
||||||
|
public string Autor { get; set; } = string.Empty;
|
||||||
|
public string ISBN { get; set; } = string.Empty;
|
||||||
|
public int Año { get; set; }
|
||||||
|
public string Categoria { get; set; } = string.Empty;
|
||||||
|
public int CopiasDisponibles { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
24
Models/Prestamo.cs
Normal file
24
Models/Prestamo.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace BibliotecaAPI.Models
|
||||||
|
{
|
||||||
|
public class Prestamo
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("Usuario")]
|
||||||
|
public int UsuarioId { get; set; }
|
||||||
|
public Usuario? Usuario { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("Libro")]
|
||||||
|
public int LibroId { get; set; }
|
||||||
|
public Libro? Libro { get; set; }
|
||||||
|
|
||||||
|
public DateTime FechaPrestamo { get; set; } = DateTime.Now;
|
||||||
|
public DateTime? FechaDevolucion { get; set; }
|
||||||
|
public bool Devuelto { get; set; } = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Models/Usuario.cs
Normal file
12
Models/Usuario.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace BibliotecaAPI.Models
|
||||||
|
{
|
||||||
|
public class Usuario
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string Nombre { get; set; } = string.Empty;
|
||||||
|
public string Email { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
60
controllers/LibrosController.cs
Normal file
60
controllers/LibrosController.cs
Normal 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.Id }, libro);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPut("{id}")]
|
||||||
|
public async Task<IActionResult> PutLibro(int id, Libro libro)
|
||||||
|
{
|
||||||
|
if (id != libro.Id) 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(id);
|
||||||
|
if (libro == null) return NotFound();
|
||||||
|
_context.Libros.Remove(libro);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return NoContent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
82
controllers/PrestamosController.cs
Normal file
82
controllers/PrestamosController.cs
Normal 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.LibroId);
|
||||||
|
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 > 15)
|
||||||
|
.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.UsuarioId == usuarioId)
|
||||||
|
.ToListAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
33
controllers/UsuariosController.cs
Normal file
33
controllers/UsuariosController.cs
Normal 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.Id }, usuario);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user