Exemple #1
0
        private static async Task InitializeDb(GraphLabsContext context, InitialData initialData)
        {
            await context.Database.MigrateAsync();

            if (!context.TaskModules.Any())
            {
                foreach (var module in initialData.GetTaskModules())
                {
                    context.TaskModules.Add(module);
                }
                await context.SaveChangesAsync();
            }
            if (!context.TaskVariants.Any())
            {
                foreach (var variant in initialData.GetTaskVariants(context.TaskModules))
                {
                    context.TaskVariants.Add(variant);
                }
                await context.SaveChangesAsync();
            }
            if (!context.Users.Any())
            {
                foreach (var user in initialData.GetUsers())
                {
                    context.Users.Add(user);
                }
                await context.SaveChangesAsync();
            }
        }
        public async Task <IActionResult> Post([FromBody] TaskModule module)
        {
            _db.TaskModules.Add(module);
            await _db.SaveChangesAsync();

            return(Created(module));
        }
        public async Task <IActionResult> Delete(long key)
        {
            var variant = await _db.TaskVariants.SingleOrDefaultAsync(v => v.Id == key);

            if (variant != null)
            {
                _db.TaskVariants.Remove(variant);
                await _db.SaveChangesAsync();
            }
            else
            {
                return(NotFound());
            }

            return(Ok());
        }
Exemple #4
0
        public async Task <IActionResult> Post([FromBody] CreateLogRequest request)
        {
            if (request == null ||
                request.VariantId == 0 ||
                string.IsNullOrEmpty(request.Action))
            {
                return(PreconditionFailed());
            }

            var email = _contextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.Email);

            if (string.IsNullOrEmpty(email))
            {
                return(BadRequest());
            }

            var student = await _db.Students.SingleOrDefaultAsync(s => s.Email == email);

            if (student == null)
            {
                return(BadRequest());
            }

            var logEntry = new TaskVariantLog
            {
                Action    = request.Action,
                DateTime  = DateTime.Now,
                StudentId = student.Id,
                VariantId = request.VariantId,
                Penalty   = request.Penalty ?? 0
            };

            await _db.TaskVariantLogs.AddAsync(logEntry);

            await _db.SaveChangesAsync();

            return(Created(logEntry));
        }
        public async Task <TaskVariant> CreateOrUpdate(long id, string json)
        {
            var taskVariant = await _db.TaskVariants.SingleOrDefaultAsync(v => v.Id == id);

            if (taskVariant == null)
            {
                taskVariant = new TaskVariant();
            }

            var variant    = TryExecute(() => JObject.Parse(json), "Не удалось распарсить данные.");
            var idFromJson = TryExecute(() => variant["meta"]["id"].Value <long>(), "Не удалось прочитать значение meta/id");

            if (idFromJson != taskVariant.Id)
            {
                throw new VariantConvertException(
                          "Не совпадает id в json (meta/id) и идентификатор реально обновляемого варианта.");
            }

            var moduleId = TryExecute(() => variant["meta"]["moduleId"].Value <long>(), "Не удалось прочитать значение meta/moduleId");

            if (taskVariant.TaskModule == null)
            {
                var module = await _db.TaskModules.SingleOrDefaultAsync(m => m.Id == moduleId);

                if (module == null)
                {
                    throw new VariantConvertException($"Модуль с id={moduleId} не найден.");
                }
                taskVariant.TaskModule = module;
            }
            else if (moduleId != taskVariant.TaskModule.Id)
            {
                throw new VariantConvertException(
                          "Значение moduleId в json (meta/moduleId) не совпадает с реальным идентификатором модуля");
            }

            var name = TryExecute(() => variant["meta"]["name"].Value <string>(), "Не удалось прочитать значение meta/name");

            if (string.IsNullOrWhiteSpace(name))
            {
                throw new VariantConvertException("Имя варианта (meta/name) не может быть пустым");
            }
            taskVariant.Name = name;

            var dataArray = TryExecute(() => variant["data"], "Не удалось прочитать значение data");

            foreach (var data in dataArray.Children())
            {
                var type = TryExecute(() => data["type"].Value <string>(), "Не удалось прочитать значение data/type");
                if (string.IsNullOrWhiteSpace(type))
                {
                    throw new VariantConvertException("Тип варианта (data/type) не может быть пустым");
                }

                var value = TryExecute(() => data["value"], "Не удалось прочитать значение data/value");
                if (!value.Children().Any())
                {
                    throw new VariantConvertException("Значение варианта (data/value) не может быть пустым");
                }
            }

            taskVariant.VariantData = TryExecute(() => dataArray.ToString(), "Непредвиденная ошибка при записи VariantData");

            if (taskVariant.Id == 0)
            {
                _db.Add(taskVariant);
            }

            await _db.SaveChangesAsync();

            return(taskVariant);
        }