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()); }
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); }