Newer
Older
Warehouse / src / Application / Partners / GetPartnerDetails / GetPartnerDetailsQuery.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 1003 bytes Init
using MyWarehouse.Application.Common.Dependencies.DataAccess;
using MyWarehouse.Application.Common.Exceptions;
using MyWarehouse.Domain.Partners;

namespace MyWarehouse.Application.Partners.GetPartnerDetails;

public record GetPartnerDetailsQuery : IRequest<PartnerDetailsDto>
{
    public int Id { get; set; }
}

public class GetPartnerDetailsQueryHandler : IRequestHandler<GetPartnerDetailsQuery, PartnerDetailsDto>
{
    private readonly IUnitOfWork _unitOfWork;
    private readonly IMapper _mapper;

    public GetPartnerDetailsQueryHandler(IUnitOfWork unitOfWork, IMapper mapper)
    {
        _unitOfWork = unitOfWork;
        _mapper = mapper;
    }

    public async Task<PartnerDetailsDto> Handle(GetPartnerDetailsQuery request, CancellationToken cancellationToken)
    {
        var partner = await _unitOfWork.Partners.GetByIdAsync(request.Id)
            ?? throw new EntityNotFoundException(nameof(Partner), request.Id);

        return _mapper.Map<PartnerDetailsDto>(partner);
    }
}