From 35d3e58d86f3355866003907c5f4c04af8037e1d Mon Sep 17 00:00:00 2001 From: sanchezvem Date: Sat, 13 Dec 2025 11:24:01 +0100 Subject: [PATCH] fix error and add CreatePurchaseOrder.cs --- .../Request/CreatePurchaseOrderDto.cs | 9 ++++ .../Response/GetPurchaseOrderDto.cs | 2 +- .../Request/CreatePurchaseOrderProductDto.cs | 8 +++ .../Request/UpdatePurchaseProductDto.cs | 6 +-- .../Response/GetPurchaseProductDto.cs | 4 +- .../PurchaseOrders/CreatePurchaseOrder.cs | 52 +++++++++++++++++++ .../MappingProfiles/DtoToEntityMappings.cs | 1 + .../MappingProfiles/EntityToDtoMappings.cs | 14 ++++- 8 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 PyroFetes/DTO/PurchaseOrder/Request/CreatePurchaseOrderDto.cs create mode 100644 PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseOrderProductDto.cs create mode 100644 PyroFetes/Endpoints/PurchaseOrders/CreatePurchaseOrder.cs diff --git a/PyroFetes/DTO/PurchaseOrder/Request/CreatePurchaseOrderDto.cs b/PyroFetes/DTO/PurchaseOrder/Request/CreatePurchaseOrderDto.cs new file mode 100644 index 0000000..e7da0dc --- /dev/null +++ b/PyroFetes/DTO/PurchaseOrder/Request/CreatePurchaseOrderDto.cs @@ -0,0 +1,9 @@ +using PyroFetes.DTO.PurchaseProduct.Request; + +namespace PyroFetes.DTO.PurchaseOrder.Request; + +public class CreatePurchaseOrderDto +{ + public string? PurchaseConditions { get; set; } + public List? Products { get; set; } +} diff --git a/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs b/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs index 9854d8b..20dbe4e 100644 --- a/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs +++ b/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs @@ -6,5 +6,5 @@ public class GetPurchaseOrderDto { public int Id { get; set; } public string? PurchaseConditions { get; set; } - public List? GetPurchaseProductDto { get; set; } + public List? Products { get; set; } } \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseOrderProductDto.cs b/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseOrderProductDto.cs new file mode 100644 index 0000000..60c2f07 --- /dev/null +++ b/PyroFetes/DTO/PurchaseProduct/Request/CreatePurchaseOrderProductDto.cs @@ -0,0 +1,8 @@ +namespace PyroFetes.DTO.PurchaseProduct.Request; + +// Pour ajouter les produits lors de la création +public class CreatePurchaseOrderProductDto +{ + public int ProductId { get; set; } + public int Quantity { get; set; } +} \ No newline at end of file diff --git a/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs b/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs index ea6b7ae..8a718cb 100644 --- a/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs +++ b/PyroFetes/DTO/PurchaseProduct/Request/UpdatePurchaseProductDto.cs @@ -7,11 +7,11 @@ public class UpdatePurchaseProductDto public int Quantity { get; set; } - public int ProductReferences { get; set; } + public string? ProductReferences { get; set; } public string? ProductName { get; set; } public decimal ProductDuration {get; set;} - public decimal ProductCaliber { get; set; } - public int ProductApprovalNumber { get; set; } + public int ProductCaliber { get; set; } + public string? ProductApprovalNumber { get; set; } public decimal ProductWeight { get; set; } public decimal ProductNec { get; set; } public string? ProductImage { get; set; } diff --git a/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs b/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs index d086ed3..b781bd4 100644 --- a/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs +++ b/PyroFetes/DTO/PurchaseProduct/Response/GetPurchaseProductDto.cs @@ -6,8 +6,8 @@ public class GetPurchaseProductDto public string? ProductReferences { get; set; } public string? ProductName { get; set; } public decimal ProductDuration {get; set;} - public decimal ProductCaliber { get; set; } - public int ProductApprovalNumber { get; set; } + public int ProductCaliber { get; set; } + public string? ProductApprovalNumber { get; set; } public decimal ProductWeight { get; set; } public decimal ProductNec { get; set; } public string? ProductImage { get; set; } diff --git a/PyroFetes/Endpoints/PurchaseOrders/CreatePurchaseOrder.cs b/PyroFetes/Endpoints/PurchaseOrders/CreatePurchaseOrder.cs new file mode 100644 index 0000000..0fc433a --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseOrders/CreatePurchaseOrder.cs @@ -0,0 +1,52 @@ +using FastEndpoints; +using PyroFetes.DTO.PurchaseOrder.Request; +using PyroFetes.DTO.PurchaseOrder.Response; +using PyroFetes.DTO.PurchaseProduct.Request; +using PyroFetes.DTO.PurchaseProduct.Response; +using PyroFetes.Models; +using PyroFetes.Repositories; +using PyroFetes.Specifications.Products; +using PyroFetes.Specifications.PurchaseOrders; + +namespace PyroFetes.Endpoints.PurchaseOrders; + +public class CreatePurchaseOrder( + PurchaseOrdersRepository purchaseOrdersRepository, + ProductsRepository productsRepository, + AutoMapper.IMapper mapper) : Endpoint +{ + public override void Configure() + { + Post("/purchaseOrders"); + AllowAnonymous(); + } + + public override async Task HandleAsync(CreatePurchaseOrderDto req, CancellationToken ct) + { + var purchaseOrder = new PurchaseOrder + { + PurchaseConditions = req.PurchaseConditions ?? "Conditions non précisées", + PurchaseProducts = new List() + }; + + foreach (var line in req.Products) + { + var product = await productsRepository.GetByIdAsync(line.ProductId, ct); + if (product == null) + { + await Send.NotFoundAsync(ct); + return; + } + + purchaseOrder.PurchaseProducts.Add(new PurchaseProduct + { + ProductId = product.Id, + Quantity = line.Quantity, + }); + } + + await purchaseOrdersRepository.AddAsync(purchaseOrder, ct); + + await Send.OkAsync(mapper.Map(purchaseOrder), ct); + } +} \ No newline at end of file diff --git a/PyroFetes/MappingProfiles/DtoToEntityMappings.cs b/PyroFetes/MappingProfiles/DtoToEntityMappings.cs index d1a1db8..ed46819 100644 --- a/PyroFetes/MappingProfiles/DtoToEntityMappings.cs +++ b/PyroFetes/MappingProfiles/DtoToEntityMappings.cs @@ -38,6 +38,7 @@ public class DtoToEntityMappings : Profile CreateMap(); CreateMap(); + CreateMap(); CreateMap(); CreateMap(); diff --git a/PyroFetes/MappingProfiles/EntityToDtoMappings.cs b/PyroFetes/MappingProfiles/EntityToDtoMappings.cs index aebafa9..b1c6433 100644 --- a/PyroFetes/MappingProfiles/EntityToDtoMappings.cs +++ b/PyroFetes/MappingProfiles/EntityToDtoMappings.cs @@ -32,9 +32,19 @@ public class EntityToDtoMappings : Profile CreateMap(); - CreateMap(); + // CreateMap(); + // + // CreateMap(); - CreateMap(); + CreateMap() + .ForMember(dest => dest.Products, + opt => opt.MapFrom(src => src.PurchaseProducts)); + + CreateMap() + .ForMember(dest => dest.ProductId, opt => opt.MapFrom(src => src.ProductId)) + .ForMember(dest => dest.Quantity, opt => opt.MapFrom(src => src.Quantity)) + .ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.Product.Name)) + .ForMember(dest => dest.ProductReferences, opt => opt.MapFrom(src => src.Product.Reference)); CreateMap();