Newer
Older
Warehouse / src / Application / Partners / CreatePartner / CreatePartnerCommand.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 1 KB Init
using MyWarehouse.Application.Common.Dependencies.DataAccess;
using MyWarehouse.Domain.Partners;

namespace MyWarehouse.Application.Partners.CreatePartner;

public record CreatePartnerCommand : IRequest<int>
{
    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 CreatePartnerCommandHandler : IRequestHandler<CreatePartnerCommand, int>
{
    private readonly IUnitOfWork _unitOfWork;

    public CreatePartnerCommandHandler(IUnitOfWork unitOfWork)
        => _unitOfWork = unitOfWork;

    public async Task<int> Handle(CreatePartnerCommand request, CancellationToken cancellationToken)
    {
        var partner = new Partner(
            name: request.Name.Trim(),
            address: new Address(
                country: request.Address.Country.Trim(),
                zipcode: request.Address.ZipCode.Trim(),
                street: request.Address.Street.Trim(),
                city: request.Address.City.Trim()
            ));

        _unitOfWork.Partners.Add(partner);
        await _unitOfWork.SaveChanges();

        return partner.Id;
    }
}