Exemplo n.º 1
0
        public JsonResult UpdateSubTask(SubTaskRequest request)
        {
            var checkResult = CheckUsername(request.username);

            if (checkResult != null)
            {
                return(checkResult);
            }

            if (!CornerCaseCheckHelper.Check(request.projectId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(701, "Invalid projectId."));
            }

            if (!CornerCaseCheckHelper.Check(request.taskId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(501, "Invalid taskId."));
            }

            if (!CornerCaseCheckHelper.Check(request.subTaskName, 50, CornerCaseCheckHelper.Title))
            {
                return(JsonReturnHelper.ErrorReturn(511, "Invalid subTaskName."));
            }

            if (!CornerCaseCheckHelper.Check(request.description, 100, CornerCaseCheckHelper.Description))
            {
                return(JsonReturnHelper.ErrorReturn(602, "Invalid description."));
            }

            if (!CornerCaseCheckHelper.Check(request.principal, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(101, "Invalid principal."));
            }


            var user = _meshContext.Users.First(u => u.Email == request.username);

            var project = _meshContext.Projects.FirstOrDefault(p => p.Id == request.projectId);

            if (project == null)
            {
                return(JsonReturnHelper.ErrorReturn(707, "Project does not exist."));
            }

            var task = _meshContext.Tasks.FirstOrDefault(t => t.Id == request.taskId);

            if (task == null)
            {
                return(JsonReturnHelper.ErrorReturn(604, "Task does not exist."));
            }

            if (_permissionCheck.CheckProjectPermission(request.username, project) != PermissionCheckHelper.ProjectAdmin &&
                task.LeaderId != user.Id)
            {
                return(JsonReturnHelper.ErrorReturn(701, "Permission denied."));
            }

            var principalUser = _meshContext.Users.FirstOrDefault(u => u.Email == request.principal);

            if (principalUser == null || _permissionCheck.CheckProjectPermission(request.principal, project) ==
                PermissionCheckHelper.ProjectOutsider)
            {
                return(JsonReturnHelper.ErrorReturn(608, "Principal does not exist."));
            }

            var subTask = _meshContext.Subtasks.FirstOrDefault(s => s.TaskId == request.taskId && s.Title == request.subTaskName);

            if (subTask == null)
            {
                return(JsonReturnHelper.ErrorReturn(606, "SubTask does not exist."));
            }

            var assign = _meshContext.Assigns.First(a => a.TaskId == subTask.TaskId && a.Title == subTask.Title);

            try
            {
                subTask.Finished    = request.isFinished;
                subTask.Description = request.description;
                _meshContext.Update(subTask);
                _meshContext.Assigns.Remove(assign);
                _meshContext.Assigns.Add(new Assign()
                {
                    UserId = principalUser.Id,
                    TaskId = subTask.TaskId,
                    Title  = subTask.Title
                });
                _meshContext.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
            }


            return(SubTaskResult(new SubTaskInfo()
            {
                CreatedTime = subTask.CreatedTime,
                Description = subTask.Description,
                Founder = user.Nickname,
                TaskId = subTask.TaskId,
                Title = subTask.Title,
                isFinished = subTask.Finished,
                Status = GetStatus(task.EndTime, subTask.Finished),
                Principal = GetSubTaskPrincipals(subTask.TaskId, subTask.Title)
            }
                                 ));
        }
Exemplo n.º 2
0
        public JsonResult CreateSubTask(SubTaskRequest request)
        {
            var checkResult = CheckUsername(request.username);

            if (checkResult != null)
            {
                return(checkResult);
            }

            if (!CornerCaseCheckHelper.Check(request.projectId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(701, "Invalid projectId."));
            }

            if (!CornerCaseCheckHelper.Check(request.taskId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(501, "Invalid taskId."));
            }

            if (!CornerCaseCheckHelper.Check(request.subTaskName, 50, CornerCaseCheckHelper.Title))
            {
                return(JsonReturnHelper.ErrorReturn(511, "Invalid subTaskName."));
            }

            if (!CornerCaseCheckHelper.Check(request.description, 100, CornerCaseCheckHelper.Description))
            {
                return(JsonReturnHelper.ErrorReturn(602, "Invalid description."));
            }

            if (!CornerCaseCheckHelper.Check(request.principal, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(101, "Invalid principal."));
            }

            var user = _meshContext.Users.First(u => u.Email == request.username);

            var project = _meshContext.Projects.FirstOrDefault(p => p.Id == request.projectId);

            if (project == null)
            {
                return(JsonReturnHelper.ErrorReturn(707, "Project does not exist."));
            }

            var task = _meshContext.Tasks.FirstOrDefault(t => t.Id == request.taskId);

            if (task == null)
            {
                return(JsonReturnHelper.ErrorReturn(604, "Task does not exist."));
            }

            if (_permissionCheck.CheckProjectPermission(request.username, project) != PermissionCheckHelper.ProjectAdmin)
            {
                return(JsonReturnHelper.ErrorReturn(701, "Permission denied."));
            }

            var subTask = _meshContext.Subtasks.FirstOrDefault(s => s.TaskId == task.Id && s.Title == request.subTaskName);

            if (subTask != null)
            {
                return(JsonReturnHelper.ErrorReturn(608, "subTaskName already exists."));
            }

            var principalUser = _meshContext.Users.FirstOrDefault(u => u.Email == request.principal);

            if (principalUser == null)
            {
                return(JsonReturnHelper.ErrorReturn(603, "Principal does not exist."));
            }

            var newSubTask = new Subtask()
            {
                TaskId      = task.Id,
                Title       = request.subTaskName,
                Description = request.description
            };

            using (var transaction = _meshContext.Database.BeginTransaction())
            {
                try
                {
                    _meshContext.Subtasks.Add(newSubTask);
                    _meshContext.Assigns.Add(new Assign()
                    {
                        TaskId = newSubTask.TaskId,
                        Title  = newSubTask.Title,
                        UserId = principalUser.Id
                    });
                    _meshContext.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    _logger.LogError(e.ToString());
                    return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
                }
            }


            return(SubTaskResult(new SubTaskInfo()
            {
                TaskId = newSubTask.TaskId,
                CreatedTime = newSubTask.CreatedTime,
                Description = newSubTask.Description,
                Founder = user.Nickname,
                Title = newSubTask.Title,
                isFinished = newSubTask.Finished,
                Status = GetStatus(task.EndTime, newSubTask.Finished),
                Principal = GetSubTaskPrincipals(newSubTask.TaskId, newSubTask.Title)
            }));
        }