From 4f129112636aa3febc300aa792edc27a7e29db77 Mon Sep 17 00:00:00 2001 From: sanchezvem Date: Thu, 16 Oct 2025 23:28:27 +0100 Subject: [PATCH] creating endpoints from PurchaseOrder --- .../Response/GetPurchaseOrderDto.cs | 5 +- .../DeletePurchaseOrderEndpoint.cs | 41 ++++++++++++++ .../GetAllPurchaseOrderEndpoint.cs | 45 +++++++++++++++ .../PurchaseOrder/GetPurchaseOrderEndpoint.cs | 56 +++++++++++++++++++ .../DeletePurchaseProductEndpoint.cs | 25 ++++----- .../PatchPurchaseProductQuantityEndpoint.cs | 2 +- 6 files changed, 157 insertions(+), 17 deletions(-) create mode 100644 PyroFetes/Endpoints/PurchaseOrder/DeletePurchaseOrderEndpoint.cs create mode 100644 PyroFetes/Endpoints/PurchaseOrder/GetAllPurchaseOrderEndpoint.cs create mode 100644 PyroFetes/Endpoints/PurchaseOrder/GetPurchaseOrderEndpoint.cs diff --git a/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs b/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs index 38a012f..9854d8b 100644 --- a/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs +++ b/PyroFetes/DTO/PurchaseOrder/Response/GetPurchaseOrderDto.cs @@ -1,7 +1,10 @@ -namespace PyroFetes.DTO.PurchaseOrder.Response; +using PyroFetes.DTO.PurchaseProduct.Response; + +namespace PyroFetes.DTO.PurchaseOrder.Response; public class GetPurchaseOrderDto { public int Id { get; set; } public string? PurchaseConditions { get; set; } + public List? GetPurchaseProductDto { get; set; } } \ No newline at end of file diff --git a/PyroFetes/Endpoints/PurchaseOrder/DeletePurchaseOrderEndpoint.cs b/PyroFetes/Endpoints/PurchaseOrder/DeletePurchaseOrderEndpoint.cs new file mode 100644 index 0000000..50bce61 --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseOrder/DeletePurchaseOrderEndpoint.cs @@ -0,0 +1,41 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; + +namespace PyroFetes.Endpoints.PurchaseOrder; + +public class DeletePurchaseOrderRequest +{ + public int Id { get; set; } +} + +public class DeletePurchaseOrderEndpoint(PyroFetesDbContext database) : Endpoint +{ + public override void Configure() + { + Delete("/api/purchaseOrders/{Id}", x => new {x.Id}); + AllowAnonymous(); + } + + public override async Task HandleAsync(DeletePurchaseOrderRequest req, CancellationToken ct) + { + var purchaseOrder = await database.PurchaseOrders + .Include(po => po.PurchaseProducts) + .SingleOrDefaultAsync(po => po.Id == req.Id, ct); + + if (purchaseOrder == null) + { + await Send.NotFoundAsync(ct); + return; + } + + if (purchaseOrder.PurchaseProducts != null && purchaseOrder.PurchaseProducts.Any()) + { + database.PurchaseProducts.RemoveRange(purchaseOrder.PurchaseProducts); + } + + database.PurchaseOrders.Remove(purchaseOrder); + await database.SaveChangesAsync(ct); + + await Send.NoContentAsync(ct); + } +} \ No newline at end of file diff --git a/PyroFetes/Endpoints/PurchaseOrder/GetAllPurchaseOrderEndpoint.cs b/PyroFetes/Endpoints/PurchaseOrder/GetAllPurchaseOrderEndpoint.cs new file mode 100644 index 0000000..c79de3d --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseOrder/GetAllPurchaseOrderEndpoint.cs @@ -0,0 +1,45 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; +using PyroFetes.DTO.PurchaseOrder.Response; +using PyroFetes.DTO.PurchaseProduct.Response; + +namespace PyroFetes.Endpoints.PurchaseOrder; + +public class GetAllPurchaseOrderEndpoint(PyroFetesDbContext database) : EndpointWithoutRequest> +{ + public override void Configure() + { + Get("/api/purchaseOrders"); + } + + public override async Task HandleAsync(CancellationToken ct) + { + var purchaseOrder = await database.PurchaseOrders + .Include(p => p.PurchaseProducts) + .Select(purchaseOrder => new GetPurchaseOrderDto() + { + Id = purchaseOrder.Id, + PurchaseConditions = purchaseOrder.PurchaseConditions, + GetPurchaseProductDto = purchaseOrder.PurchaseProducts + .Select(p => new GetPurchaseProductDto + { + ProductId = p.ProductId, + ProductReferences = p.Product.Reference, + ProductName = p.Product.Name, + ProductDuration = p.Product.Duration, + ProductCaliber = p.Product.Caliber, + ProductApprovalNumber = p.Product.ApprovalNumber, + ProductWeight = p.Product.Weight, + ProductNec = p.Product.Nec, + ProductImage = p.Product.Image, + ProductLink = p.Product.Link, + ProductMinimalQuantity = p.Product.MinimalQuantity, + PurchaseOrderId = p.PurchaseOrderId, + Quantity = p.Quantity, + }).ToList() + }) + .ToListAsync(ct); + + await Send.OkAsync(purchaseOrder, ct); + } +} \ No newline at end of file diff --git a/PyroFetes/Endpoints/PurchaseOrder/GetPurchaseOrderEndpoint.cs b/PyroFetes/Endpoints/PurchaseOrder/GetPurchaseOrderEndpoint.cs new file mode 100644 index 0000000..0f0562a --- /dev/null +++ b/PyroFetes/Endpoints/PurchaseOrder/GetPurchaseOrderEndpoint.cs @@ -0,0 +1,56 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; +using PyroFetes.DTO.PurchaseOrder.Response; +using PyroFetes.DTO.PurchaseProduct.Response; + +namespace PyroFetes.Endpoints.PurchaseOrder; + +public class GetPurchaseOrderRequest +{ + public int Id { get; set; } +} + +public class GetPurchaseOrderEndpoint(PyroFetesDbContext database) : Endpoint +{ + public override void Configure() + { + Get("/api/purchaseOrders/{@Id}", x => new {x.Id}); + } + + public override async Task HandleAsync(GetPurchaseOrderRequest req, CancellationToken ct) + { + var purchaseOrder = await database.PurchaseOrders + .SingleOrDefaultAsync(x => x.Id == req.Id, ct); + + if (purchaseOrder == null) + { + await Send.NotFoundAsync(ct); + return; + } + + GetPurchaseOrderDto responseDto = new() + { + Id = purchaseOrder.Id, + PurchaseConditions = purchaseOrder.PurchaseConditions, + GetPurchaseProductDto = purchaseOrder.PurchaseProducts + .Select(p => new GetPurchaseProductDto + { + ProductId = p.ProductId, + ProductReferences = p.Product.Reference, + ProductName = p.Product.Name, + ProductDuration = p.Product.Duration, + ProductCaliber = p.Product.Caliber, + ProductApprovalNumber = p.Product.ApprovalNumber, + ProductWeight = p.Product.Weight, + ProductNec = p.Product.Nec, + ProductImage = p.Product.Image, + ProductLink = p.Product.Link, + ProductMinimalQuantity = p.Product.MinimalQuantity, + PurchaseOrderId = p.PurchaseOrderId, + Quantity = p.Quantity, + }).ToList() + }; + + await Send.OkAsync(responseDto, ct); + } +} \ No newline at end of file diff --git a/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs b/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs index 5a02644..02853da 100644 --- a/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs +++ b/PyroFetes/Endpoints/PurchaseProduct/DeletePurchaseProductEndpoint.cs @@ -3,37 +3,32 @@ using Microsoft.EntityFrameworkCore; namespace PyroFetes.Endpoints.PurchaseProduct; -public class DeletePurchaseOrderRequest +public class DeletePurchaseProductRequest { - public int Id { get; set; } + public int ProductId { get; set; } + public int PurchaseOrderId { get; set; } } -public class DeletePurchaseOrderEndpoint(PyroFetesDbContext database) : Endpoint +public class DeletePurchaseOrderEndpoint(PyroFetesDbContext database) : Endpoint { public override void Configure() { - Delete("/api/purchaseOrders/{Id}", x => new {x.Id}); + Delete("/api/purchaseProducts/{ProductId}/{PurchaseOrderId}", x => new {x.ProductId, x.PurchaseOrderId}); AllowAnonymous(); } - public override async Task HandleAsync(DeletePurchaseOrderRequest req, CancellationToken ct) + public override async Task HandleAsync(DeletePurchaseProductRequest req, CancellationToken ct) { - var purchaseOrder = await database.PurchaseOrders - .Include(po => po.PurchaseProducts) - .SingleOrDefaultAsync(po => po.Id == req.Id, ct); + var purchaseProduct = await database.PurchaseProducts + .SingleOrDefaultAsync(po => po.ProductId == req.ProductId && po.PurchaseOrderId == req.PurchaseOrderId, ct); - if (purchaseOrder == null) + if (purchaseProduct == null) { await Send.NotFoundAsync(ct); return; } - if (purchaseOrder.PurchaseProducts != null && purchaseOrder.PurchaseProducts.Any()) - { - database.PurchaseProducts.RemoveRange(purchaseOrder.PurchaseProducts); - } - - database.PurchaseOrders.Remove(purchaseOrder); + database.PurchaseProducts.Remove(purchaseProduct); await database.SaveChangesAsync(ct); await Send.NoContentAsync(ct); diff --git a/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs b/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs index dd53757..2253987 100644 --- a/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs +++ b/PyroFetes/Endpoints/PurchaseProduct/PatchPurchaseProductQuantityEndpoint.cs @@ -9,7 +9,7 @@ public class PatchPurchaseProductQuantityEndpoint(PyroFetesDbContext database) : { public override void Configure() { - Patch("/api/purchaseOrders/{ProductId}/{PurchaseOrderId}/Quantity", x => new { x.ProductId, x.PurchaseOrderId }); + Patch("/api/purchaseProducts/{ProductId}/{PurchaseOrderId}/Quantity", x => new { x.ProductId, x.PurchaseOrderId }); AllowAnonymous(); }