From 669938d67794bea124402f9ac833df88a278e757 Mon Sep 17 00:00:00 2001 From: Cristiano Date: Thu, 20 Nov 2025 16:09:04 +0100 Subject: [PATCH] Refactored WarehouseProduct --- .../WareHouseProducts/GetTotalQuantityEndpoint.cs | 14 ++++++++------ PyroFetes/Program.cs | 1 + PyroFetes/Repositories/PyrofetesRepository.cs | 4 ++-- .../Repositories/WarehouseProductsRepository.cs | 5 +++++ .../GetProductTotalQuantitySpec.cs | 14 ++++++++++++++ .../GetWarehouseProductByProductIdSpec.cs | 13 +++++++++++++ 6 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 PyroFetes/Repositories/WarehouseProductsRepository.cs create mode 100644 PyroFetes/Specifications/WarehouseProducts/GetProductTotalQuantitySpec.cs create mode 100644 PyroFetes/Specifications/WarehouseProducts/GetWarehouseProductByProductIdSpec.cs diff --git a/PyroFetes/Endpoints/WareHouseProducts/GetTotalQuantityEndpoint.cs b/PyroFetes/Endpoints/WareHouseProducts/GetTotalQuantityEndpoint.cs index a6398c8..2a5c8a8 100644 --- a/PyroFetes/Endpoints/WareHouseProducts/GetTotalQuantityEndpoint.cs +++ b/PyroFetes/Endpoints/WareHouseProducts/GetTotalQuantityEndpoint.cs @@ -2,6 +2,8 @@ using Microsoft.EntityFrameworkCore; using PyroFetes.DTO.WareHouseProduct.Response; using PyroFetes.Models; +using PyroFetes.Repositories; +using PyroFetes.Specifications.WarehouseProducts; namespace PyroFetes.Endpoints.WareHouseProducts; @@ -10,7 +12,8 @@ public class GetTotalQuantityRequest public int ProductId { get; set; } } -public class GetTotalQuantityEndpoint(PyroFetesDbContext database) : Endpoint +public class GetTotalQuantityEndpoint( + WarehouseProductsRepository warehouseProductsRepository) : Endpoint { public override void Configure() { @@ -20,8 +23,7 @@ public class GetTotalQuantityEndpoint(PyroFetesDbContext database) : Endpoint wp.ProductId == req.ProductId, ct); + bool exists = await warehouseProductsRepository.AnyAsync(new GetWarehouseProductByProductIdSpec(req.ProductId), ct); if (!exists) { @@ -29,9 +31,9 @@ public class GetTotalQuantityEndpoint(PyroFetesDbContext database) : Endpoint wp.ProductId == req.ProductId) - .SumAsync(wp => wp.Quantity, ct); + int totalQuantity = + await warehouseProductsRepository.SumAsync(new GetProductTotalQuantitySpec(req.ProductId), + wp => wp.Quantity, ct); GetTotalQuantityDto responseDto = new() { diff --git a/PyroFetes/Program.cs b/PyroFetes/Program.cs index 21f864b..1251820 100644 --- a/PyroFetes/Program.cs +++ b/PyroFetes/Program.cs @@ -31,6 +31,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); MapperConfiguration mappingConfig = new(mc => { diff --git a/PyroFetes/Repositories/PyrofetesRepository.cs b/PyroFetes/Repositories/PyrofetesRepository.cs index 0f09bd3..baebacc 100644 --- a/PyroFetes/Repositories/PyrofetesRepository.cs +++ b/PyroFetes/Repositories/PyrofetesRepository.cs @@ -59,9 +59,9 @@ public class PyrofetesRepository(DbContext databaseContext, AutoMapper.IMappe /// /// /// - public async Task SumAsync( + public async Task SumAsync( ISpecification specification, - Expression> selector, + Expression> selector, CancellationToken cancellationToken = default) { return await ApplySpecification(specification).SumAsync(selector, cancellationToken); diff --git a/PyroFetes/Repositories/WarehouseProductsRepository.cs b/PyroFetes/Repositories/WarehouseProductsRepository.cs new file mode 100644 index 0000000..e53207a --- /dev/null +++ b/PyroFetes/Repositories/WarehouseProductsRepository.cs @@ -0,0 +1,5 @@ +using PyroFetes.Models; + +namespace PyroFetes.Repositories; + +public class WarehouseProductsRepository(PyroFetesDbContext pyrofetesContext, AutoMapper.IMapper mapper) : PyrofetesRepository(pyrofetesContext, mapper); \ No newline at end of file diff --git a/PyroFetes/Specifications/WarehouseProducts/GetProductTotalQuantitySpec.cs b/PyroFetes/Specifications/WarehouseProducts/GetProductTotalQuantitySpec.cs new file mode 100644 index 0000000..9dd451f --- /dev/null +++ b/PyroFetes/Specifications/WarehouseProducts/GetProductTotalQuantitySpec.cs @@ -0,0 +1,14 @@ +using Ardalis.Specification; +using PyroFetes.Models; + +namespace PyroFetes.Specifications.WarehouseProducts; + +public sealed class GetProductTotalQuantitySpec : Specification +{ + public GetProductTotalQuantitySpec(int productId) + { + Query + .Where(wp => wp.ProductId == productId); + + } +} \ No newline at end of file diff --git a/PyroFetes/Specifications/WarehouseProducts/GetWarehouseProductByProductIdSpec.cs b/PyroFetes/Specifications/WarehouseProducts/GetWarehouseProductByProductIdSpec.cs new file mode 100644 index 0000000..ff135c1 --- /dev/null +++ b/PyroFetes/Specifications/WarehouseProducts/GetWarehouseProductByProductIdSpec.cs @@ -0,0 +1,13 @@ +using Ardalis.Specification; +using PyroFetes.Models; + +namespace PyroFetes.Specifications.WarehouseProducts; + +public sealed class GetWarehouseProductByProductIdSpec : Specification +{ + public GetWarehouseProductByProductIdSpec(int productId) + { + Query + .Where(x => x.ProductId == productId); + } +} \ No newline at end of file