public async Task <IActionResult> PostNewTask(string json) { TaskViewModelNew jsonTask = JsonConvert.DeserializeObject <TaskViewModelNew>(json); StudentTask newTask = new StudentTask { Name = jsonTask.Name, GroupId = jsonTask.GroupId, TaskText = jsonTask.Text, IsContest = jsonTask.IsContest, From = jsonTask.Time[0], To = jsonTask.Time[1], NumberOfAttempts = jsonTask.AttemptsNumber }; var x = _db.StudentTasks.Add(newTask); var beforeState = x.State; int r = _db.SaveChanges(); var afterState = x.State; bool ok = beforeState == Microsoft.EntityFrameworkCore.EntityState.Added && afterState == Microsoft.EntityFrameworkCore.EntityState.Unchanged && r == 1; if (ok) { var newTaskTests = jsonTask.Tests.Select(tt => new TaskTest { TaskId = newTask.Id, TestType = tt.Type, Block = tt.Block, Weight = tt.Weight / 100.0, TestData = null }).ToArray(); _db.TaskTests.AddRange(newTaskTests); r = _db.SaveChanges(); ok = r == newTaskTests.Length; } if (ok) { var plagCheck = new PlagiarismCheck { TaskId = newTask.Id, Settings = new PlagiarismCheckSettings { Language = "csharp", MaxMatches = 5, MinPercent = 0.4, MakeCheck = false } }; _db.Add(plagCheck); _db.SaveChanges(); try { var msgQueue = RabbitHutch.CreateBus(_config.MessageQueueInfo, _config.FrontEnd); var request = new PlagiarismCheckRequest { TaskId = newTask.Id, }; await msgQueue.SendAsync(_config.MessageQueueInfo.PlagiarismQueueName, request); } catch (RabbitMQ.Client.Exceptions.BrokerUnreachableException e) { return(Content("error")); } } return(Content(ok ? "/TestingSystem/Professor/ChangeTask?id=" + newTask.Id.ToString() : "error")); }
public IActionResult UpdateTask(string json) { TaskViewModelNew jsonTask = JsonConvert.DeserializeObject <TaskViewModelNew>(json); var y = _db.StudentTasks.Find(jsonTask.Id); if (y is null) { return(Content("error")); } y.Name = jsonTask.Name; y.GroupId = jsonTask.GroupId; y.TaskText = jsonTask.Text; y.IsContest = jsonTask.IsContest; y.From = jsonTask.Time[0]; y.To = jsonTask.Time[1]; y.NumberOfAttempts = jsonTask.AttemptsNumber; var x = _db.StudentTasks.Update(y); var beforeState = x.State; int r = _db.SaveChanges(); var afterState = x.State; bool ok = beforeState == Microsoft.EntityFrameworkCore.EntityState.Modified && afterState == Microsoft.EntityFrameworkCore.EntityState.Unchanged && r == 1; if (ok) { var oldTaskTests = jsonTask.Tests.Where(tt => !tt.IsNew).ToList(); foreach (var tt in oldTaskTests) { var oldTt = _db.TaskTests.Find(tt.Id); if (oldTt is null) { return(Content("error")); } if (oldTt.Weight == tt.Weight / 100.0 && oldTt.Block == oldTt.Block) { continue; } oldTt.Block = tt.Block; oldTt.Weight = tt.Weight / 100.0; x = _db.StudentTasks.Update(y); beforeState = x.State; _db.SaveChanges(); afterState = x.State; ok = beforeState == Microsoft.EntityFrameworkCore.EntityState.Modified && afterState == Microsoft.EntityFrameworkCore.EntityState.Unchanged; if (!ok) { return(Content("error")); } } var newTaskTests = jsonTask.Tests.Where(tt => tt.IsNew).Select(tt => new TaskTest { TaskId = y.Id, TestType = tt.Type, Block = tt.Block, Weight = tt.Weight / 100.0, TestData = null }).ToArray(); _db.TaskTests.AddRange(newTaskTests); r = _db.SaveChanges(); ok = r == newTaskTests.Length; } return(Content(ok ? "/TestingSystem/Professor/ChangeTask?id=" + x.Entity.Id.ToString() : "error")); }