using FastEndpoints; using Microsoft.EntityFrameworkCore; using PyroFetes.Models; namespace PyroFetes.Endpoints.Warehouse; public class DeleteWarehouseRequest { public int Id { get; set; } } public class DeleteWarehouseEndpoint(PyroFetesDbContext db) : Endpoint { public override void Configure() { // L’annotation correcte du paramètre est {id}, pas {@id} Delete("/api/warehouse/{@id}", x => new { x.Id }); AllowAnonymous(); } public override async Task HandleAsync(DeleteWarehouseRequest req, CancellationToken ct) { // On charge aussi les WarehouseProducts liés pour les supprimer proprement var warehouseToDelete = await db.Warehouses .Include(w => w.WarehouseProducts) .SingleOrDefaultAsync(w => w.Id == req.Id, cancellationToken: ct); if (warehouseToDelete == null) { Console.WriteLine($"Aucun entrepôt avec l'ID {req.Id} trouvé."); await Send.NotFoundAsync(ct); return; } // 🔹 Suppression des relations WarehouseProduct avant l'entrepôt var relatedWarehouseProducts = await db.WarehouseProducts .Where(wp => wp.WarehouseId == req.Id) .ToListAsync(ct); if (relatedWarehouseProducts.Any()) { db.WarehouseProducts.RemoveRange(relatedWarehouseProducts); } // 🔹 Suppression de l’entrepôt db.Warehouses.Remove(warehouseToDelete); await db.SaveChangesAsync(ct); Console.WriteLine($"Entrepôt {warehouseToDelete.Name} (ID {req.Id}) supprimé avec succès."); await Send.NoContentAsync(ct); } }