Compare commits

...

3 Commits

Author SHA1 Message Date
khwezi db6c77ce6a Merge pull request 'taskcancellation' (#131) from taskcancellation into master
Reviewed-on: #131
2026-06-15 12:08:45 +02:00
Khwezi Mngoma 516062ed5d Refactored order item retrieval error message
continuous-integration/drone/pr Build is passing
2026-06-15 12:08:19 +02:00
Khwezi Mngoma 16832ec214 Added GetOrderItems to OrderService 2026-06-15 12:06:33 +02:00
@@ -43,7 +43,7 @@ public sealed class OrderService(IDbContextFactory<MidrandBooksDbContext> contex
if (!await context.Orders.AnyAsync(o => o.Id == orderId, cancellationToken))
return Result.Fail<long>("Order not found.");
if(!await context.Books.AnyAsync(ab => ab.Id == request.AuthorBookId, cancellationToken))
if (!await context.Books.AnyAsync(ab => ab.Id == request.AuthorBookId, cancellationToken))
return Result.Fail<long>("Author book not found.");
if (!await context.Prices.AnyAsync(pp => pp.Id == request.ProductPriceId, cancellationToken))
@@ -51,7 +51,7 @@ public sealed class OrderService(IDbContextFactory<MidrandBooksDbContext> contex
var existingItem = await context.OrderItems.FirstOrDefaultAsync(i => i.ProductPriceId == request.ProductPriceId && i.OrderId == orderId, cancellationToken);
if(existingItem is not null)
if (existingItem is not null)
{
existingItem.Quantity += request.Quantity;
@@ -82,7 +82,7 @@ public sealed class OrderService(IDbContextFactory<MidrandBooksDbContext> contex
{
try
{
if(items.Length == 0)
if (items.Length == 0)
return Result.Fail("No items to add.");
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
@@ -203,13 +203,33 @@ public sealed class OrderService(IDbContextFactory<MidrandBooksDbContext> contex
}
}
public async ValueTask<Result<OrderItem[]>> GetOrderItemsAsync(long orderId, CancellationToken cancellationToken = default)
{
try
{
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
var orderItems = await context.OrderItems
.Where(o => o.OrderId == orderId)
.ToListAsync(cancellationToken);
return orderItems.Count > 0
? Result.Ok(orderItems.Select(i => i.ToModel()).ToArray())
: Result.Fail<OrderItem[]>($"Order items not found for order ID {orderId}");
}
catch (Exception ex)
{
return Result.Fail(new Error(ex.Message).CausedBy(ex));
}
}
public async ValueTask<Result<Order[]>> GetOrdersByCustomerAsync(long customerId, CancellationToken cancellationToken = default)
{
try
{
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
if(!await context.Customers.AnyAsync(c => c.Id == customerId, cancellationToken))
if (!await context.Customers.AnyAsync(c => c.Id == customerId, cancellationToken))
return Result.Fail<Order[]>("Customer not found.");
var orders = await context.Orders
@@ -276,16 +296,16 @@ public sealed class OrderService(IDbContextFactory<MidrandBooksDbContext> contex
{
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
if(!await context.Orders.AnyAsync(o => o.Id == orderId, cancellationToken))
if (!await context.Orders.AnyAsync(o => o.Id == orderId, cancellationToken))
return Result.Fail("Order not found.");
if(!await context.Addresses.AnyAsync(a => a.Id == request.AddressId, cancellationToken))
if (!await context.Addresses.AnyAsync(a => a.Id == request.AddressId, cancellationToken))
return Result.Fail("Address not found.");
if(!await context.ShippingProviders.AnyAsync(sp => sp.Id == request.ShippingProviderId && sp.Enabled, cancellationToken))
if (!await context.ShippingProviders.AnyAsync(sp => sp.Id == request.ShippingProviderId && sp.Enabled, cancellationToken))
return Result.Fail("Shipping provider not found or disabled.");
if(await context.Shippings.AnyAsync(s => s.OrderId == orderId, cancellationToken))
if (await context.Shippings.AnyAsync(s => s.OrderId == orderId, cancellationToken))
return Result.Fail("Shipping already exists for this order.");
var shipping = context.Shippings.Add(new Entities.Shipping
@@ -398,7 +418,7 @@ public sealed class OrderService(IDbContextFactory<MidrandBooksDbContext> contex
{
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
if(await context.ShippingProviders.AnyAsync(sp => sp.Type == request.Type, cancellationToken))
if (await context.ShippingProviders.AnyAsync(sp => sp.Type == request.Type, cancellationToken))
return Result.Fail("Shipping provider with the same type already exists.");
var shippingProvider = context.ShippingProviders.Add(new Entities.ShippingProvider