using FastEndpoints; using Microsoft.EntityFrameworkCore; using PyroFetes.DTO.Show.Request; using PyroFetes.DTO.Show.Response; namespace PyroFetes.Endpoints.Show; public class UpdateShowEndpoint(PyroFetesDbContext pyroFetesDbContext) : Endpoint { public override void Configure() { Put("/api/shows/{Id}"); AllowAnonymous(); } public override async Task HandleAsync(UpdateShowDto req, CancellationToken ct) { if (!req.Id.HasValue) { await Send.NotFoundAsync(ct); return; } var show = await pyroFetesDbContext.Shows .FirstOrDefaultAsync(s => s.Id == req.Id.Value, ct); if (show is null) { await Send.NotFoundAsync(ct); return; } show.Name = req.Name ?? show.Name; show.Place = req.Place ?? show.Place; show.Description = req.Description ?? show.Description; show.PyrotechnicImplementationPlan = req.PyrotechnicImplementationPlan ?? show.PyrotechnicImplementationPlan; if (req.Date.HasValue) { show.Date = DateOnly.FromDateTime(req.Date.Value); } await pyroFetesDbContext.SaveChangesAsync(ct); var result = new ReadShowDto { Id = show.Id, Name = show.Name, Place = show.Place, Description = show.Description, PyrotechnicImplementationPlan = show.PyrotechnicImplementationPlan, Date = show.Date.HasValue ? show.Date.Value.ToDateTime(TimeOnly.MinValue) : null }; await Send.OkAsync(result, ct); } }