Api/Netina.Core/EntityServices/OrderBagHandlers/GetUserOrderBagQueryHandler.cs

48 lines
1.8 KiB
C#
Raw Normal View History

namespace Netina.Core.EntityServices.OrderBagHandlers;
2024-08-09 21:55:16 +03:30
public class GetUserOrderBagQueryHandler(
IRepositoryWrapper repositoryWrapper,
ICurrentUserService currentUserService,
IMediator mediator)
: IRequestHandler<GetUserOrderBagQuery, Order>
{
public async Task<Order> Handle(GetUserOrderBagQuery request, CancellationToken cancellationToken)
{
2024-08-09 21:55:16 +03:30
if (currentUserService.UserId == null)
throw new AppException("Customer id notfound", ApiResultStatusCode.BadRequest);
2024-08-09 21:55:16 +03:30
if (!Guid.TryParse(currentUserService.UserId, out Guid userId))
throw new AppException("Customer id wrong",ApiResultStatusCode.BadRequest);
2024-08-09 21:55:16 +03:30
var customer = await repositoryWrapper.SetRepository<Customer>()
.TableNoTracking
.FirstOrDefaultAsync(c => c.UserId == userId, cancellationToken);
if (customer == null)
{
customer = new Customer
{
UserId = userId
};
2024-08-09 21:55:16 +03:30
repositoryWrapper.SetRepository<Customer>()
.Add(customer);
2024-08-09 21:55:16 +03:30
await repositoryWrapper.SaveChangesAsync(cancellationToken);
}
2024-08-09 21:55:16 +03:30
var order = await repositoryWrapper.SetRepository<Order>()
.TableNoTracking
.FirstOrDefaultAsync(o => o.CustomerId == customer.Id && o.OrderStatus == OrderStatus.OrderBag,cancellationToken);
if (order == null)
2024-08-09 21:55:16 +03:30
order = await mediator.Send(new CreateBaseOrderCommand(userId),cancellationToken);
else
{
2024-08-09 21:55:16 +03:30
var orderProducts = await repositoryWrapper.SetRepository<OrderProduct>()
.TableNoTracking
.Where(op=>op.OrderId==order.Id)
.ToListAsync(cancellationToken);
orderProducts.ForEach(op=>order.AddOrderProduct(op));
}
return order;
}
}