diff --git a/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs b/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs index f862856..c2ee0d9 100644 --- a/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs +++ b/PyroFetes/DTO/DeliveryNote/Request/CreateDeliveryNoteDto.cs @@ -5,7 +5,8 @@ public class CreateDeliveryNoteDto public string? TrackingNumber { get; set; } public DateOnly EstimateDeliveryDate { get; set; } public DateOnly ExpeditionDate { get; set; } - public DateOnly RealDeliveryDate { get; set; } public int DelivererId { get; set; } + + public Dictionary? ProductQuantities { get; set; } } \ No newline at end of file diff --git a/PyroFetes/Endpoints/DeliveryNotes/CreateDeliveryNoteEndpoint.cs b/PyroFetes/Endpoints/DeliveryNotes/CreateDeliveryNoteEndpoint.cs new file mode 100644 index 0000000..20addcd --- /dev/null +++ b/PyroFetes/Endpoints/DeliveryNotes/CreateDeliveryNoteEndpoint.cs @@ -0,0 +1,67 @@ +using FastEndpoints; +using PyroFetes.DTO.DeliveryNote.Request; +using PyroFetes.DTO.DeliveryNote.Response; +using PyroFetes.Models; +using PyroFetes.Repositories; +using PyroFetes.Specifications.Deliverers; +using PyroFetes.Specifications.Products; + +namespace PyroFetes.Endpoints.DeliveryNotes; + +public class CreateDeliveryNoteEndpoint( + DeliveryNotesRepository deliveryNotesRepository, + DeliverersRepository deliverersRepository, + ProductsRepository productsRepository, + ProductDeliveriesRepository productDeliveriesRepository, + AutoMapper.IMapper mapper) : Endpoint +{ + public override void Configure() + { + Post("/api/DeliveryNote"); + } + + public override async Task HandleAsync(CreateDeliveryNoteDto req, CancellationToken ct) + { + Deliverer? deliverer = await deliverersRepository.FirstOrDefaultAsync(new GetDelivererByIdSpec(req.DelivererId), ct); + + if (deliverer == null) + { + await Send.StringAsync("No deliverer found", 404, cancellation: ct); + return; + } + + //Creating the Delivery Note + DeliveryNote newDeliveryNote = new DeliveryNote() + { + TrackingNumber = req.TrackingNumber, + EstimateDeliveryDate = req.EstimateDeliveryDate, + ExpeditionDate = req.ExpeditionDate, + DelivererId = req.DelivererId, + Deliverer = deliverer, + + }; + + await deliveryNotesRepository.AddAsync(newDeliveryNote, ct); + + foreach (var productQuantity in req.ProductQuantities!) + { + Models.Product? product = + await productsRepository.FirstOrDefaultAsync(new GetProductByIdSpec(productQuantity.Key), ct); + if (product != null) + { + ProductDelivery productDelivery = new ProductDelivery() + { + DeliveryNote = newDeliveryNote, + Quantity = productQuantity.Value, + Product = product, + DeliveryNoteId = newDeliveryNote.Id + }; + + await productDeliveriesRepository.AddAsync(productDelivery, ct); + } + + } + + await Send.OkAsync(mapper.Map(newDeliveryNote), ct); + } +} \ No newline at end of file diff --git a/PyroFetes/Endpoints/Product/GetAllProductsEndpoint.cs b/PyroFetes/Endpoints/Products/GetAllProductsEndpoint.cs similarity index 100% rename from PyroFetes/Endpoints/Product/GetAllProductsEndpoint.cs rename to PyroFetes/Endpoints/Products/GetAllProductsEndpoint.cs diff --git a/PyroFetes/Endpoints/Product/GetProductEndpoint.cs b/PyroFetes/Endpoints/Products/GetProductEndpoint.cs similarity index 100% rename from PyroFetes/Endpoints/Product/GetProductEndpoint.cs rename to PyroFetes/Endpoints/Products/GetProductEndpoint.cs diff --git a/PyroFetes/Endpoints/Product/PatchProductMinimalStockEndpoint.cs b/PyroFetes/Endpoints/Products/PatchProductMinimalStockEndpoint.cs similarity index 100% rename from PyroFetes/Endpoints/Product/PatchProductMinimalStockEndpoint.cs rename to PyroFetes/Endpoints/Products/PatchProductMinimalStockEndpoint.cs diff --git a/PyroFetes/Endpoints/Product/UpdateProductEndpoint.cs b/PyroFetes/Endpoints/Products/UpdateProductEndpoint.cs similarity index 100% rename from PyroFetes/Endpoints/Product/UpdateProductEndpoint.cs rename to PyroFetes/Endpoints/Products/UpdateProductEndpoint.cs diff --git a/PyroFetes/Migrations/PyroFetesDbContextModelSnapshot.cs b/PyroFetes/Migrations/PyroFetesDbContextModelSnapshot.cs index 43d8e4f..ddf13ed 100644 --- a/PyroFetes/Migrations/PyroFetesDbContextModelSnapshot.cs +++ b/PyroFetes/Migrations/PyroFetesDbContextModelSnapshot.cs @@ -326,7 +326,7 @@ namespace PyroFetes.Migrations b.Property("ExpeditionDate") .HasColumnType("date"); - b.Property("RealDeliveryDate") + b.Property("RealDeliveryDate") .HasColumnType("date"); b.Property("TrackingNumber") diff --git a/PyroFetes/Models/DeliveryNote.cs b/PyroFetes/Models/DeliveryNote.cs index 21e873e..e94792f 100644 --- a/PyroFetes/Models/DeliveryNote.cs +++ b/PyroFetes/Models/DeliveryNote.cs @@ -9,7 +9,7 @@ public class DeliveryNote public int DelivererId { get; set; } [Required] public DateOnly EstimateDeliveryDate { get; set; } [Required] public DateOnly ExpeditionDate { get; set; } - [Required] public DateOnly RealDeliveryDate { get; set; } + public DateOnly? RealDeliveryDate { get; set; } public Deliverer? Deliverer { get; set; } public List? ProductDeliveries { get; set; } diff --git a/PyroFetes/Repositories/DeliveryNotesRepository.cs b/PyroFetes/Repositories/DeliveryNotesRepository.cs new file mode 100644 index 0000000..6d87b05 --- /dev/null +++ b/PyroFetes/Repositories/DeliveryNotesRepository.cs @@ -0,0 +1,5 @@ +using PyroFetes.Models; + +namespace PyroFetes.Repositories; + +public class DeliveryNotesRepository(PyroFetesDbContext pyrofetesContext, AutoMapper.IMapper mapper) : PyrofetesRepository(pyrofetesContext, mapper); \ No newline at end of file diff --git a/PyroFetes/Repositories/ProductDeliveriesRepository.cs b/PyroFetes/Repositories/ProductDeliveriesRepository.cs new file mode 100644 index 0000000..376e24b --- /dev/null +++ b/PyroFetes/Repositories/ProductDeliveriesRepository.cs @@ -0,0 +1,5 @@ +using PyroFetes.Models; + +namespace PyroFetes.Repositories; + +public class ProductDeliveriesRepository(PyroFetesDbContext pyrofetesContext, AutoMapper.IMapper mapper) : PyrofetesRepository(pyrofetesContext, mapper); \ No newline at end of file