using Microsoft.EntityFrameworkCore; using Netina.Common.Models.Exception; using Netina.Domain.CommandQueries.Commands; using Netina.Domain.Entities.Orders; using Netina.Domain.Entities.Users; using Netina.Repository.Repositories.Base.Contracts; namespace Netina.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; } }