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