diff --git a/LiteCharms.Features.MidrandBooks/Customers/CustomerService.cs b/LiteCharms.Features.MidrandBooks/Customers/CustomerService.cs index 5350220..0bb50a5 100644 --- a/LiteCharms.Features.MidrandBooks/Customers/CustomerService.cs +++ b/LiteCharms.Features.MidrandBooks/Customers/CustomerService.cs @@ -334,6 +334,28 @@ public sealed class CustomerService(IDbContextFactory con } } + public async ValueTask> GetCustomerAsync(string email, CancellationToken cancellationToken = default) + { + try + { + await using var context = await contextFactory.CreateDbContextAsync(cancellationToken); + + var customer = await context.Customers + .AsNoTracking() + .Include(c => c.Contacts) + .Include(c => c.Addresses) + .FirstOrDefaultAsync(c => c.Email == email, cancellationToken); + + return customer is not null + ? Result.Ok(customer.ToModel()) + : Result.Fail(new Error($"Customer with email '{email}' does not exist.")); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } + public async ValueTask> GetCustomerAsync(long customerId, CancellationToken cancellationToken = default) { try diff --git a/LiteCharms.Features.MidrandBooks/Orders/OrderService.cs b/LiteCharms.Features.MidrandBooks/Orders/OrderService.cs index 4ea6252..e94cded 100644 --- a/LiteCharms.Features.MidrandBooks/Orders/OrderService.cs +++ b/LiteCharms.Features.MidrandBooks/Orders/OrderService.cs @@ -164,6 +164,27 @@ public sealed class OrderService(IDbContextFactory contex public async ValueTask CancelOrderAsync(long orderId, CancellationToken cancellationToken = default) => await UpdateOrderStatusAsync(orderId, OrderStatus.Cancelled, cancellationToken); + public async ValueTask> GetPendingOrderAsync(long customerId, CancellationToken cancellationToken = default) + { + try + { + await using var context = await contextFactory.CreateDbContextAsync(cancellationToken); + + var order = await context.Orders.AsNoTracking() + .Where(o => o.Status == OrderStatus.Pending && o.CustomerId == customerId) + .OrderByDescending(o => o.Id) + .FirstOrDefaultAsync(cancellationToken); + + return order is not null + ? Result.Ok(order.ToModel()) + : Result.Fail("Order not found."); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } + public async ValueTask> GetOrderAsync(long orderId, CancellationToken cancellationToken = default) { try