using MyWarehouse.Application.Common.Dependencies.DataAccess;
using MyWarehouse.Application.Common.Exceptions;
using MyWarehouse.Domain.Partners;
namespace MyWarehouse.Application.Partners.UpdatePartner;
public record UpdatePartnerCommand : IRequest
{
public int Id { get; init; }
public string Name { get; init; } = null!;
public AddressDto Address { get; init; } = null!;
public record AddressDto
{
public string Country { get; init; } = null!;
public string ZipCode { get; init; } = null!;
public string Street { get; init; } = null!;
public string City { get; init; } = null!;
}
}
public class UpdatePartnerCommandHandler : IRequestHandler<UpdatePartnerCommand>
{
private readonly IUnitOfWork _unitOfWork;
public UpdatePartnerCommandHandler(IUnitOfWork unitOfWork)
=> _unitOfWork = unitOfWork;
public async Task<Unit> Handle(UpdatePartnerCommand request, CancellationToken cancellationToken)
{
var partner = await _unitOfWork.Partners.GetByIdAsync(request.Id)
?? throw new EntityNotFoundException(nameof(Partner), request.Id);
partner.UpdateName(request.Name.Trim());
partner.UpdateAddress(new Address(
country: request.Address.Country.Trim(),
zipcode: request.Address.ZipCode.Trim(),
street: request.Address.Street.Trim(),
city: request.Address.City.Trim()
));
await _unitOfWork.SaveChanges();
return Unit.Value;
}
}