using FastEndpoints; using Microsoft.EntityFrameworkCore; using PyroFetes.DTO.Sound.Request; using PyroFetes.DTO.Sound.Response; namespace PyroFetes.Endpoints.Sound; public class UpdateSoundEndpoint(PyroFetesDbContext pyroFetesDbContext) : Endpoint { public override void Configure() { Put("/api/sounds/{Id}"); AllowAnonymous(); } public override async Task HandleAsync(UpdateSoundDto req, CancellationToken ct) { if (!req.Id.HasValue) { await Send.NotFoundAsync(ct); return; } var sound = await pyroFetesDbContext.Sounds .FirstOrDefaultAsync(s => s.Id == req.Id.Value, ct); if (sound is null) { await Send.NotFoundAsync(ct); return; } sound.Name = req.Name ?? sound.Name; sound.Type = req.Type ?? sound.Type; sound.Artist = req.Artist ?? sound.Artist; if (int.TryParse(req.Duration, out var duration)) { sound.Duration = duration; } sound.Kind = req.Kind ?? sound.Kind; sound.Format = req.Format ?? sound.Format; sound.CreationDate = req.CreationDate ?? sound.CreationDate; if (int.TryParse(req.SoundCategoryId, out var categoryId)) { sound.SoundCategoryId = categoryId; } await pyroFetesDbContext.SaveChangesAsync(ct); var result = new ReadSoundDto { Id = sound.Id, Name = sound.Name, Type = sound.Type, Artist = sound.Artist, Duration = sound.Duration?.ToString(), Kind = sound.Kind, Format = sound.Format, CreationDate = sound.CreationDate, SoundCategoryId = sound.SoundCategoryId.ToString() }; await Send.OkAsync(result, ct); } }