Added notifications

Added shopping cart and items
Added quotes
Refactored relatinoships
Migrated changes
Refactored cqrs commands and queries
Refactored mappings
This commit is contained in:
Khwezi Mngoma
2026-05-05 23:59:31 +02:00
parent 4b822c63b2
commit 83f51c6a23
67 changed files with 3051 additions and 42 deletions
@@ -4,22 +4,25 @@ public class CreateOrderCommand : IRequest<Result<Guid>>
{
public Guid CustomerId { get; set; }
public Guid ProductPriceId { get; set; }
public Guid ShoppingCartId { get; set; }
private CreateOrderCommand(Guid customerId, Guid productPriceId)
public Guid? QuoteId { get; set; }
private CreateOrderCommand(Guid customerId, Guid shoppingCartId, Guid? quoteId = null)
{
CustomerId = customerId;
ProductPriceId = productPriceId;
ShoppingCartId = shoppingCartId;
QuoteId = quoteId;
}
public static CreateOrderCommand Create(Guid customerId, Guid productPriceId)
public static CreateOrderCommand Create(Guid customerId, Guid shoppingCartId, Guid? quoteId = null)
{
if (customerId == Guid.Empty)
throw new ArgumentException("CustomerId is required.", nameof(customerId));
if (productPriceId == Guid.Empty)
throw new ArgumentException("ProductPriceId is required.", nameof(productPriceId));
if (shoppingCartId == Guid.Empty)
throw new ArgumentException("ShoppingCartId is required.", nameof(shoppingCartId));
return new(customerId, productPriceId);
return new(customerId, shoppingCartId, quoteId);
}
}
@@ -10,16 +10,26 @@ public class CreateOrderCommandHandler(IDbContextFactory<LeadGeneratorDbContext>
{
using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
if(!await context.Customers.AnyAsync(c => c.Id == request.CustomerId, cancellationToken))
return Result.Fail<Guid>(new Error($"Customer {request.CustomerId} does not exist."));
if(!await context.ShoppingCarts.AnyAsync(sc => sc.Id == request.ShoppingCartId, cancellationToken))
return Result.Fail<Guid>(new Error($"Shopping cart {request.ShoppingCartId} does not exist."));
if(request.QuoteId.HasValue && !await context.Quotes.AnyAsync(q => q.Id == request.QuoteId.Value, cancellationToken))
return Result.Fail<Guid>(new Error($"Quote {request.QuoteId.Value} does not exist."));
var newOrder = context.Orders.Add(new Entities.Order
{
CustomerId = request.CustomerId,
ProductPriceId = request.ProductPriceId,
ShoppingCartId = request.ShoppingCartId,
QuoteId = request.QuoteId,
CreatedAt = DateTime.UtcNow
});
return await context.SaveChangesAsync(cancellationToken) > 0
? Result.Ok(newOrder.Entity.Id)
: Result.Fail<Guid>(new Error($"Failed to create customer {request.CustomerId} order using product price {request.ProductPriceId}."));
: Result.Fail<Guid>(new Error($"Failed to create customer {request.CustomerId} order using shopping cart {request.ShoppingCartId}."));
}
catch (Exception ex)
{
@@ -2,9 +2,9 @@
namespace LiteCharms.Features.Orders.Commands.Handlers;
public class UpdateOrderCommandHandler(IDbContextFactory<LeadGeneratorDbContext> contextFactory) : IRequestHandler<UpdateOrderCommand, Result>
public class UpdateOrderStatusCommandHandler(IDbContextFactory<LeadGeneratorDbContext> contextFactory) : IRequestHandler<UpdateOrderStatusCommand, Result>
{
public async ValueTask<Result> Handle(UpdateOrderCommand request, CancellationToken cancellationToken)
public async ValueTask<Result> Handle(UpdateOrderStatusCommand request, CancellationToken cancellationToken)
{
try
{
@@ -2,7 +2,7 @@
namespace LiteCharms.Features.Orders.Commands;
public class UpdateOrderCommand : IRequest<Result>
public class UpdateOrderStatusCommand : IRequest<Result>
{
public Guid OrderId { get; set; }
@@ -10,14 +10,14 @@ public class UpdateOrderCommand : IRequest<Result>
public string? Note { get; set; }
private UpdateOrderCommand(Guid orderId, OrderStatus status, string? note)
private UpdateOrderStatusCommand(Guid orderId, OrderStatus status, string? note)
{
OrderId = orderId;
Status = status;
Note = note;
}
public static UpdateOrderCommand Create(Guid orderId, OrderStatus status, string? note)
public static UpdateOrderStatusCommand Create(Guid orderId, OrderStatus status, string? note)
{
if (orderId == Guid.Empty)
throw new ArgumentException("OrderId is required.", nameof(orderId));