public void AddTransfer(TransferCommand command) { var barrelFrom = _barrelRepository.GetById(command.BarrelFromId); var barrelTo = _barrelRepository.GetById(command.BarrelToId); var transfer = new Transfer(command); if ((barrelFrom.CurrentCapacity >= command.Amount) && (barrelTo.Capacity >= barrelTo.CurrentCapacity + command.Amount)) { barrelFrom.RemoveAmount(command.Amount); barrelTo.AddAmount(command.Amount); } else { throw new Exception("Specified amount can't fit into the barrels"); } using (var scope = new TransactionScope()) { _barrelRepository.UpdateBarrel(command.BarrelFromId, barrelFrom); _barrelRepository.UpdateBarrel(command.BarrelToId, barrelTo); _transferRepository.AddTransfer(transfer); scope.Complete(); } }
public Task Handle(TransferCreatedEvent @event) { _transferRepository.AddTransfer(new TransferLog() { FromAccount = @event.From, ToAccount = @event.To, TransferAmount = @event.Amount }); return(Task.CompletedTask); }