public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { using var tx = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled); var order = await db.Orders.FirstAsync(o => o.Id == request.OrderId, cancellationToken); var candidateHero = await db.Heroes.FirstAsync(h => h.Id == request.SelectedHero, cancellationToken); var availableHeroes = await db.FindHeroForOrder(order); var heroAvailable = availableHeroes.Any(h => h.Id == candidateHero.Id); if (!heroAvailable) { throw new ApplicationException(($"Hero {candidateHero.Name} not available!")); } order.CreateOfferWithHero(candidateHero); await db.SaveChangesAsync(cancellationToken); await bpmnService.CompleteTask(request.TaskId, order); tx.Complete(); return(Unit.Value); }
public async Task <ICollection <HeroDto> > Handle(Query request, CancellationToken cancellationToken) { var order = db.Orders.FirstOrDefault(o => o.Id == request.OrderId); var availableHeroes = await db.FindHeroForOrder(order); return(availableHeroes.Select(HeroDto.FromEntity).ToList()); }