using API.DTO.Warehouse.Request; using API.DTO.Warehouse.Response; using FastEndpoints; using PyroFetes.Models; namespace PyroFetes.Endpoints.Warehouse; public class CreateWarehouseEndpoint(PyroFetesDbContext db) : Endpoint //Instanciation d'une connexion à la bdd dans un endpoint, utilise l'élément de requête CreateWarehouseDto et l'élement de réponse GetWarehouseDto { public override void Configure() //Configuration de l'endpoint { Post("/api/warehouse"); //Créer un entrepot AllowAnonymous(); //Autorise l'accès sans authentification } public override async Task HandleAsync(CreateWarehouseDto req, CancellationToken ct) { var warehouse = new Models.Warehouse //Création d'un nom, d'un poids maximal et minimal, d'une adresse, d'un code postal et du nom de la ville rentré par l'utilisateur { Name = req.Name, MaxWeight = req.MaxWeight, Current = req.Current, MinWeight = req.MinWeight, Address = req.Adress, ZipCode = req.ZipCode, City = req.City }; db.Warehouses.Add(warehouse); //Ajout de l'entrepot à la bdd await db.SaveChangesAsync(ct); //Sauvegarde de l'entrepot dans la bdd // 🔹 Ajout des produits liés à cet entrepôt if (req.Products is not null && req.Products.Any()) { foreach (var p in req.Products) { var warehouseProduct = new WarehouseProduct { WarehouseId = warehouse.Id, ProductId = p.ProductId, Quantity = p.Quantity }; db.WarehouseProducts.Add(warehouseProduct); } await db.SaveChangesAsync(ct); } var response = new GetWarehouseDto //renvoie l'id, d'un nom, d'un poids maximal et minimal, d'une adresse, d'un code postal et du nom de la ville { Id = warehouse.Id, Name = warehouse.Name, MaxWeight = warehouse.MaxWeight, Current = warehouse.Current, MinWeight = warehouse.MinWeight, Adress = warehouse.Address, ZipCode = warehouse.ZipCode, City = warehouse.City }; await Send.OkAsync(response, ct); //Réponse au client } }