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(); }
public async Task <IActionResult> SubmitAsync([FromBody] SubmitEstimateRequest request) { await _ethereumClient.WaitForConfirmationAsync(request.TransactionHash); await _estimationService.SubmitEstimatesAsync(User.GetUserId(), request); return(NoContent()); }