예제 #1
0
        public async Task SubmitEstimatesAsync(long expertId, SubmitEstimateRequest request)
        {
            var scoring = await _scoringRepository.GetByProjectIdAsync(request.ProjectId);

            var area = request.AreaType.ToDomain();

            if (!scoring.IsOfferAccepted(expertId, area))
            {
                throw new AppErrorException(ErrorCode.AcceptedOfferNotFound);
            }

            scoring.FinishOffer(expertId, area);

            var scoringResults = await _scoringContractClient.GetResultsAsync(scoring.ContractAddress);

            var areaScore = scoringResults.AreaScores[area];

            if (scoring.HasEnoughEstimatesInArea(area))
            {
                scoring.SetScoreForArea(area, areaScore);
            }

            var project = await _projectRepository.GetByIdAsync(scoring.ProjectId);

            if (!project.IsPrivate && scoring.AreAllAreasCompleted())
            {
                scoring.Finish(scoringResults.Score, _clock.UtcNow);
            }

            await _scoringRepository.SaveChangesAsync();
        }
예제 #2
0
        public async Task <IActionResult> SubmitAsync([FromBody] SubmitEstimateRequest request)
        {
            await _ethereumClient.WaitForConfirmationAsync(request.TransactionHash);

            await _estimationService.SubmitEstimatesAsync(User.GetUserId(), request);

            return(NoContent());
        }