コード例 #1
0
        //End run
        public async Task <Unit> Handle(EndRunCommand request, CancellationToken cancellationToken)
        {
            var run = await _runRepository.GetAsync(request.RunId).ConfigureAwait(false);

            var runnerUserId = await GetRunner(request).ConfigureAwait(false);

            //update run
            run.Ended = true;
            await _runRepository.UpdateAsync(run).ConfigureAwait(false);

            //store result
            var runResult = new RunResult
            {
                RunId        = request.RunId,
                RunnerUserId = runnerUserId,
                EndedTime    = _clock.UtcNow()
            };

            await _runRepository.CreateResultAsync(runResult).ConfigureAwait(false);

            //publish event
            var evt = new RunEndedEvent
            {
                Orders       = request.Orders,
                RoomId       = request.RoomId,
                RunnerUserId = runResult.RunnerUserId,
                RunId        = runResult.RunId,
                EndedTime    = runResult.EndedTime,
                State        = request.State
            };

            await _eventPublisher.Publish(evt).ConfigureAwait(false);

            return(Unit.Value);
        }