public async Task <IActionResult> RecalculateTaskStatistics([FromQuery] RecalculateTaskStatisticsParameters parameters) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var taskIds = await tasksRepo.GetTaskIds(); if (parameters.FromTaskId.HasValue && parameters.TaskId.HasValue) { return(Json(ApiError.Create("You should pass from_task_id or task_id, not both"))); } if (parameters.FromTaskId.HasValue) { taskIds = taskIds.Skip(taskIds.FindIndex(taskId => taskId == parameters.FromTaskId)).ToList(); } if (parameters.TaskId.HasValue) { taskIds = taskIds.Where(t => t == parameters.TaskId.Value).ToList(); } foreach (var taskId in taskIds) { await CalculateTaskStatisticsParametersAsync(client.Id, taskId); GC.Collect(); } return(Json(new RecalculateTaskStatisticsResult { TaskIds = taskIds })); }
public async Task <IActionResult> RecalculateTaskStatistics([FromQuery] RecalculateTaskStatisticsParameters parameters) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var taskIds = await tasksRepo.GetTaskIds().ConfigureAwait(false); if (parameters.FromTaskId.HasValue && parameters.TaskId.HasValue) { return(BadRequest(new ErrorResponse("You should pass from_task_id or task_id, not both"))); } if (parameters.FromTaskId.HasValue) { taskIds = taskIds.Skip(taskIds.FindIndex(taskId => taskId == parameters.FromTaskId)).ToList(); } if (parameters.TaskId.HasValue) { taskIds = taskIds.Where(t => t == parameters.TaskId.Value).ToList(); } var weights = new Dictionary <Guid, List <double> >(); foreach (var(index, taskId) in taskIds.Enumerate(start: 1)) { weights[taskId] = await newSubmissionHandler.CalculateTaskStatisticsParametersAsync(client.Id, taskId, parameters.Language).ConfigureAwait(false); weights[taskId].Sort(); log.Info($"RecalculateTaskStatistics: обработано {index.PluralizeInRussian(RussianPluralizationOptions.Tasks)} из {taskIds.Count}"); GC.Collect(); } return(Json(new RecalculateTaskStatisticsResponse { TaskIds = taskIds, Weights = weights, Language = parameters.Language })); }