Add Order repositories, prepping Stripe integration

This commit is contained in:
lumijiez
2025-06-17 15:22:55 +03:00
parent 40906bea78
commit 64a50a61a4
9 changed files with 638 additions and 6 deletions

View File

@@ -10,8 +10,4 @@
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="9.0.4" />
</ItemGroup>
<ItemGroup>
<Folder Include="Repositories\Orders\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,46 @@
namespace Imprink.Domain.Models;
public class OrderFilterParameters
{
public int PageNumber { get; set; } = 1;
public int PageSize { get; set; } = 10;
public string? UserId { get; set; }
public string? OrderNumber { get; set; }
public int? OrderStatusId { get; set; }
public int? ShippingStatusId { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public decimal? MinTotalPrice { get; set; }
public decimal? MaxTotalPrice { get; set; }
public string SortBy { get; set; } = "OrderDate";
public string SortDirection { get; set; } = "DESC";
public bool IsValidDateRange()
{
if (StartDate.HasValue && EndDate.HasValue)
{
return StartDate.Value <= EndDate.Value;
}
return true;
}
public bool IsValidPriceRange()
{
if (MinTotalPrice.HasValue && MaxTotalPrice.HasValue)
{
return MinTotalPrice.Value <= MaxTotalPrice.Value;
}
return true;
}
}

View File

@@ -0,0 +1,27 @@
using Imprink.Domain.Entities.Orders;
namespace Imprink.Domain.Repositories.Orders;
public interface IOrderItemRepository
{
Task<OrderItem?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
Task<OrderItem?> GetByIdWithProductAsync(Guid id, CancellationToken cancellationToken = default);
Task<OrderItem?> GetByIdWithVariantAsync(Guid id, CancellationToken cancellationToken = default);
Task<OrderItem?> GetByIdFullAsync(Guid id, CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> GetByOrderIdAsync(Guid orderId, CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> GetByOrderIdWithProductsAsync(Guid orderId, CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> GetByProductIdAsync(Guid productId, CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> GetByProductVariantIdAsync(Guid productVariantId, CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> GetCustomizedItemsAsync(CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> GetByDateRangeAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
Task<OrderItem> AddAsync(OrderItem orderItem, CancellationToken cancellationToken = default);
Task<IEnumerable<OrderItem>> AddRangeAsync(IEnumerable<OrderItem> orderItems, CancellationToken cancellationToken = default);
Task<OrderItem> UpdateAsync(OrderItem orderItem, CancellationToken cancellationToken = default);
Task DeleteAsync(Guid id, CancellationToken cancellationToken = default);
Task DeleteByOrderIdAsync(Guid orderId, CancellationToken cancellationToken = default);
Task<bool> ExistsAsync(Guid id, CancellationToken cancellationToken = default);
Task<decimal> GetTotalValueByOrderIdAsync(Guid orderId, CancellationToken cancellationToken = default);
Task<int> GetQuantityByProductIdAsync(Guid productId, CancellationToken cancellationToken = default);
Task<int> GetQuantityByVariantIdAsync(Guid productVariantId, CancellationToken cancellationToken = default);
Task<Dictionary<Guid, int>> GetProductSalesCountAsync(DateTime? startDate = null, DateTime? endDate = null, CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,27 @@
using Imprink.Domain.Entities.Orders;
using Imprink.Domain.Models;
namespace Imprink.Domain.Repositories.Orders;
public interface IOrderRepository
{
Task<Order?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
Task<Order?> GetByIdWithItemsAsync(Guid id, CancellationToken cancellationToken = default);
Task<Order?> GetByIdWithAddressAsync(Guid id, CancellationToken cancellationToken = default);
Task<Order?> GetByIdFullAsync(Guid id, CancellationToken cancellationToken = default);
Task<Order?> GetByOrderNumberAsync(string orderNumber, CancellationToken cancellationToken = default);
Task<PagedResult<Order>> GetPagedAsync(OrderFilterParameters filterParameters, CancellationToken cancellationToken = default);
Task<IEnumerable<Order>> GetByUserIdAsync(string userId, CancellationToken cancellationToken = default);
Task<IEnumerable<Order>> GetByUserIdPagedAsync(string userId, int pageNumber, int pageSize, CancellationToken cancellationToken = default);
Task<IEnumerable<Order>> GetByOrderStatusAsync(int orderStatusId, CancellationToken cancellationToken = default);
Task<IEnumerable<Order>> GetByShippingStatusAsync(int shippingStatusId, CancellationToken cancellationToken = default);
Task<IEnumerable<Order>> GetByDateRangeAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
Task<Order> AddAsync(Order order, CancellationToken cancellationToken = default);
Task<Order> UpdateAsync(Order order, CancellationToken cancellationToken = default);
Task DeleteAsync(Guid id, CancellationToken cancellationToken = default);
Task<bool> ExistsAsync(Guid id, CancellationToken cancellationToken = default);
Task<bool> OrderNumberExistsAsync(string orderNumber, Guid? excludeId = null, CancellationToken cancellationToken = default);
Task<decimal> GetTotalRevenueAsync(CancellationToken cancellationToken = default);
Task<decimal> GetTotalRevenueByDateRangeAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
Task<int> GetOrderCountByStatusAsync(int orderStatusId, CancellationToken cancellationToken = default);
}