Newer
Older
TransactionScriptVsDomain / TrxScript / Pickup2.cs
@Derek Comartin Derek Comartin on 26 Jan 2022 1 KB Init
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Demo;
using Demo.EventSourced;
using MediatR;
using Microsoft.EntityFrameworkCore;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;
using IRequest = MediatR.IRequest;

namespace TransactionScriptVsDomain.TrxScript.Pickup2
{
    public class Pickup : IRequest
    {
        public int ShipmentId { get; set; }
        public int StopId { get; set; }
        public DateTime Departed { get; set; }
    }

    public class PickupHandler : IRequestHandler<Pickup>
    {
        private readonly IShipmentRepository _shipmentRepository;

        public PickupHandler(IShipmentRepository shipmentRepository)
        {
            _shipmentRepository = shipmentRepository;
        }

        public async Task<Unit> Handle(Pickup request, CancellationToken cancellationToken)
        {
            var shipment = await _shipmentRepository.Get(request.ShipmentId);
            shipment.Pickup(request.StopId, request.Departed);

            await _shipmentRepository.Save(shipment);

            return Unit.Value;
        }
    }
}