Example #1
0
        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
            }));
        }
Example #2
0
        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
            }));
        }