MAJ avec l'ajout de la gestion d'authentification

This commit is contained in:
2025-12-08 12:26:46 +01:00
parent f60d3443ca
commit 78e5a4e960
51 changed files with 25 additions and 80 deletions

View File

@@ -12,7 +12,6 @@ public class CreateProductEndpoint(PyroFetesDbContext db)
public override void Configure()
{
Post("/products");
AllowAnonymous();
}
public override async Task HandleAsync(CreateProductDto req, CancellationToken ct)

View File

@@ -14,7 +14,6 @@ public class DeleteProductEndpoint(PyroFetesDbContext db) : Endpoint<DeleteProdu
public override void Configure()
{
Delete("/products/{@id}", x => new { x.Id });
AllowAnonymous();
}
public override async Task HandleAsync(DeleteProductRequest req, CancellationToken ct)

View File

@@ -12,7 +12,6 @@ public class GetAllProductsEndpoint(PyroFetesDbContext db)
public override void Configure()
{
Get("/products");
AllowAnonymous();
}
public override async Task HandleAsync(CancellationToken ct)

View File

@@ -17,7 +17,6 @@ public class GetProductEndpoint(PyroFetesDbContext db)
public override void Configure()
{
Get("/products/{@id}", x => new { x.Id });
AllowAnonymous();
}
public override async Task HandleAsync(GetProductRequest req, CancellationToken ct)
@@ -25,7 +24,7 @@ public class GetProductEndpoint(PyroFetesDbContext db)
// Inclure toutes les relations : Prices + WarehouseProducts + Warehouse
var product = await db.Products
.Include(p => p.Prices)
.Include(p => p.WarehouseProducts)
.Include(p => p.WarehouseProducts)!
.ThenInclude(wp => wp.Warehouse)
.SingleOrDefaultAsync(p => p.Id == req.Id, ct);

View File

@@ -6,36 +6,29 @@ using PyroFetes.Models;
namespace PyroFetes.Endpoints.Product;
// Endpoint permettant de mettre à jour un produit existant
public class UpdateProductEndpoint(PyroFetesDbContext db)
: Endpoint<UpdateProductDto, GetProductDto>
{
public override void Configure()
{
// Route HTTP PUT avec un paramètre d'identifiant dans l'URL
Put("/products/{@id}", x => new { x.Id });
// Autorise les requêtes anonymes (sans authentification)
AllowAnonymous();
}
public override async Task HandleAsync(UpdateProductDto req, CancellationToken ct)
{
// Recherche du produit à mettre à jour, en incluant les relations Prices et WarehouseProducts
var product = await db.Products
.Include(p => p.Prices)
.Include(p => p.WarehouseProducts)
.SingleOrDefaultAsync(p => p.Id == req.Id, ct);
// Si le produit n'existe pas, on retourne une réponse 404
if (product is null)
{
await Send.NotFoundAsync(ct);
return;
}
// Mise à jour des propriétés principales du produit
product.Reference = req.Reference; // Converti int → string
product.Reference = req.Reference;
product.Name = req.Name;
product.Duration = req.Duration;
product.Caliber = req.Caliber;
@@ -47,7 +40,6 @@ public class UpdateProductEndpoint(PyroFetesDbContext db)
product.ClassificationId = req.ClassificationId;
product.ProductCategoryId = req.ProductCategoryId;
// Mise à jour des prix fournisseurs associés
db.Prices.RemoveRange(product.Prices);
foreach (var s in req.Suppliers)
{
@@ -59,7 +51,6 @@ public class UpdateProductEndpoint(PyroFetesDbContext db)
});
}
// Mise à jour des entrepôts associés
db.WarehouseProducts.RemoveRange(product.WarehouseProducts);
foreach (var w in req.Warehouses)
{
@@ -73,18 +64,16 @@ public class UpdateProductEndpoint(PyroFetesDbContext db)
await db.SaveChangesAsync(ct);
// Construction de la réponse renvoyée au client
var response = new GetProductDto
{
Id = product.Id,
Reference = req.Reference, // DTO garde int pour cohérence
Reference = req.Reference,
Name = req.Name,
Duration = req.Duration,
Caliber = req.Caliber,
ApprovalNumber = req.ApprovalNumber,
Weight = req.Weight,
Nec = req.Nec,
// Le prix de vente est pris depuis Prices
SellingPrice = req.Suppliers.FirstOrDefault()?.SellingPrice ?? 0,
Image = req.Image,
Link = req.Link,