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