public async Task <OperationResultDto> SaveAll(QuizSummaryResultDTO quizResult) { if (quizResult == null) { Logger.Fatal("QuizResultService.SaveAll: ArgumentNullException for quizResult"); throw new ArgumentNullException(nameof(quizResult)); } if (quizResult.quizResults == null) { quizResult.quizResults = new QuizResultDTO[0]; } Logger.Info($"QuizResultService.SaveAll Start: AcSessionId {quizResult.acSessionId}, quizId : {quizResult.quizId}, companyId : {quizResult.companyId}, Count : {quizResult.quizResults.Length}"); IList <string> errorMessages = new List <string>(); try { //TRICK to get eventQuizMappingId var eventQuizMappingId = GetEventQuizMappingId(quizResult); // Quiz quiz = QuizModel.GetOneById(quizResult.quizId).Value; ACSession acSession = ACSessionModel.GetOneById(quizResult.acSessionId).Value; if (acSession == null) { throw new ArgumentException($"There are not session with acSessionId : {quizResult.acSessionId}"); } int acSessionId = acSession.Id; CompanyEventQuizMapping companyEventQuizMapping = null; if (eventQuizMappingId.HasValue && eventQuizMappingId.Value != 0) { companyEventQuizMapping = EventQuizMappingModel.GetOneById(eventQuizMappingId.Value).Value; } if (!IsValid(quizResult, out ValidationResult validationSummaryDtoResult)) { errorMessages = UpdateResultToShortString(validationSummaryDtoResult); return(OperationResultDto.Error(string.Join(";", errorMessages))); } foreach (var appletResultDTO in quizResult.quizResults) { appletResultDTO.acSessionId = quizResult.acSessionId; if (IsValid(appletResultDTO, out ValidationResult validationResult)) { var appletResult = ConvertDto(appletResultDTO, quiz, acSessionId, companyEventQuizMapping); QuizResultModel.RegisterSave(appletResult); if (appletResultDTO.results != null) { await SaveAllAsync(appletResult, appletResultDTO.results); } } else { errorMessages.AddRange(UpdateResultToShortString(validationResult)); } } } catch (ArgumentException ex) { Logger.Error("QuizResultService.SaveAll:", ex); throw; } catch (Exception ex) { Logger.Error($"QuizResultService.SaveAll json={JsonConvert.SerializeObject(quizResult)}", ex); throw; } return(errorMessages.Any() ? OperationResultDto.Error(string.Join(";", errorMessages)) : OperationResultDto.Success()); }