using Microsoft.EntityFrameworkCore; using NetinaShop.Domain.Entities.Orders; namespace NetinaShop.Repository.Handlers.Orders; public class CreateBaseOrderCommandHandler : IRequestHandler { private readonly IRepositoryWrapper _repositoryWrapper; public CreateBaseOrderCommandHandler(IRepositoryWrapper repositoryWrapper) { _repositoryWrapper = repositoryWrapper; } public async Task Handle(CreateBaseOrderCommand request, CancellationToken cancellationToken) { if (request.UserId == default) throw new AppException("Customer id is null"); var customer = await _repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(c => c.UserId == request.UserId, cancellationToken); if (customer == null) { customer = new Customer { UserId = request.UserId }; _repositoryWrapper.SetRepository() .Add(customer); await _repositoryWrapper.SaveChangesAsync(cancellationToken); } var order = Order.Create(customer.Id); _repositoryWrapper.SetRepository() .Add(order); await _repositoryWrapper.SaveChangesAsync(cancellationToken); return order; } }