예제 #1
0
        public JsonResult CreateTeamKB(MemoRequest request)
        {
            var checkResult = CheckUsername(request.username);

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

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

            if (!CornerCaseCheckHelper.Check(request.knowledgeName, 50, CornerCaseCheckHelper.Title))
            {
                return(JsonReturnHelper.ErrorReturn(802, "Invalid KnowledgeName."));
            }

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


            var user = _meshContext.Users.First(u => u.Email == request.username);
            var team = _meshContext.Teams.FirstOrDefault(t => t.Id == request.teamId);

            if (team == null)
            {
                return(JsonReturnHelper.ErrorReturn(302, "Team does not exist."));
            }

            var memoCollection = _meshContext.TeamMemoCollections.First(p => p.TeamId == team.Id);

            if (_permissionCheck.CheckTeamPermission(request.username, team) == PermissionCheckHelper.TeamOutsider)
            {
                return(JsonReturnHelper.ErrorReturn(801, "Permission denied."));
            }

            var newMemo = new TeamMemo()
            {
                Title        = request.knowledgeName,
                CollectionId = memoCollection.Id,
                Text         = request.hyperlink,
                UserId       = user.Id
            };

            try
            {
                _meshContext.TeamMemos.Add(newMemo);
                _meshContext.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
            }

            return(MemoResult(new MemoInfo()
            {
                KnowledgeName = request.knowledgeName,
                HyperLink = request.hyperlink,
                CreateTime = newMemo.CreatedTime,
                KnowledgeId = newMemo.Id,
                UploaderName = request.username
            }));
        }
예제 #2
0
        public JsonResult QueryTeam(string username, int teamId)
        {
            var checkResult = CheckUsername(username);

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

            if (!CornerCaseCheckHelper.Check(teamId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(301, "Invalid teamId"));
            }

            var user = _meshContext.Users.First(u => u.Email == username);
            var team = _meshContext.Teams.FirstOrDefault(t => t.Id == teamId);

            if (team == null)
            {
                return(JsonReturnHelper.ErrorReturn(302, "Team does not exist."));
            }

            if (_permissionCheck.CheckTeamPermission(username, team) == PermissionCheckHelper.TeamOutsider)
            {
                return(JsonReturnHelper.ErrorReturn(305, "Permission denied."));
            }

            //Find team members
            var teamCooperation = _meshContext.Cooperations
                                  .Where(c => c.TeamId == team.Id);
            var adminName = _meshContext.Users.First(u => u.Id == team.AdminId).Nickname;
            var members   = _meshContext.Users
                            .Join(teamCooperation, u => u.Id, c => c.UserId, (u, c) =>
                                  new Member()
            {
                Id       = u.Id,
                Username = u.Email,
                Nickname = u.Nickname,
                Avatar   = AvatarSaveHelper.GetObject(u.Avatar)
            }).ToList();

            //Find projects of the team
            var project = _meshContext.Projects
                          .Where(p => p.TeamId == teamId);
            var teamProjects = _meshContext.Users
                               .Join(project, u => u.Id, p => p.AdminId, (u, p) =>
                                     new TeamProject()
            {
                ProjectId   = p.Id,
                ProjectName = p.Name,
                AdminName   = u.Nickname,
                ProjectLogo = AvatarSaveHelper.GetObject(p.Icon)
            }).ToList();

            var userTeamCooperation = teamCooperation.First(c => c.UserId == user.Id);

            try
            {
                userTeamCooperation.AccessCount += 1;
                _meshContext.Cooperations.Update(userTeamCooperation);
                _meshContext.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
            }

            return(Json(new
            {
                err_code = 0,
                data = new
                {
                    isSuccess = true,
                    msg = "",
                    team = new
                    {
                        teamId = team.Id,
                        teamName = team.Name,
                        createTime = team.CreatedTime,
                        adminName = adminName,
                        members = members,
                        teamProjects = teamProjects
                    }
                }
            }));
        }
예제 #3
0
        public JsonResult QueryTeamTasks(string username, int teamId)
        {
            var checkResult = CheckUsername(username);

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

            if (!CornerCaseCheckHelper.Check(teamId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(301, "Invalid teamId."));
            }


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

            var team = _meshContext.Teams.FirstOrDefault(t => t.Id == teamId);

            if (team == null)
            {
                return(JsonReturnHelper.ErrorReturn(302, "Invalid teamId."));
            }

            if (_permissionCheck.CheckTeamPermission(username, team) == PermissionCheckHelper.TeamOutsider)
            {
                return(JsonReturnHelper.ErrorReturn(701, "Permission denied."));
            }

            var tasks = _meshContext.Develops
                        .Where(d => d.UserId == user.Id)
                        .Join(_meshContext.TaskBoards, d => d.ProjectId, t => t.ProjectId, (d, t) => t)
                        .Join(_meshContext.Projects, t => t.ProjectId, p => p.Id, (t, p) => new
            {
                projectId      = p.Id,
                projectAdminId = p.AdminId,
                boardId        = t.Id
            })
                        .Join(_meshContext.Tasks, t => t.boardId, s => s.BoardId, (t, s) => new
            {
                t.projectAdminId,
                s
            })
                        .Join(_meshContext.Users, t => t.projectAdminId, u => u.Id, (t, u) => new
            {
                Founder = u.Nickname,
                task    = t.s
            })
                        .Select(m => new TaskInfo()
            {
                Id          = m.task.Id,
                CreatedTime = m.task.CreatedTime,
                Description = m.task.Description,
                EndTime     = m.task.EndTime,
                Founder     = m.Founder,
                Name        = m.task.Name,
                isFinished  = m.task.Finished,
                Principal   = _meshContext.Users.First(u => u.Id == m.task.LeaderId).Nickname,
            })
                        .ToList();

            foreach (var task in tasks)
            {
                task.SubTasks = _meshContext.Subtasks
                                .Where(b => b.TaskId == task.Id)
                                .Select(s => new SubTaskInfo()
                {
                    Title       = s.Title,
                    TaskId      = s.TaskId,
                    CreatedTime = s.CreatedTime,
                    Description = s.Description,
                    Founder     = task.Founder,
                    Status      = GetStatus(task.EndTime, s.Finished),
                    Principal   = _meshContext.Assigns
                                  .Where(a => a.TaskId == s.TaskId && a.Title == s.Title)
                                  .Join(_meshContext.Users, n => n.UserId, u => u.Id, (n, u) => u.Nickname)
                                  .ToList()
                })
                                .ToList();
            }

            return(TaskListResult(tasks));
        }
예제 #4
0
        public JsonResult CreateProject(ProjectRequest request)
        {
            var checkResult = CheckUsername(request.Username);

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

            if (!CornerCaseCheckHelper.Check(request.TeamId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(301, "Invalid teamId."));
            }

            if (!CornerCaseCheckHelper.Check(request.ProjectName, 50, CornerCaseCheckHelper.Title))
            {
                return(JsonReturnHelper.ErrorReturn(710, "Invalid projectName."));
            }

            if (!CornerCaseCheckHelper.Check(request.AdminName, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(711, "Invalid adminName"));
            }


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

            //Check if admin exists
            var admin = _meshContext.Users.FirstOrDefault(a => a.Email == request.AdminName);

            if (admin == null)
            {
                return(JsonReturnHelper.ErrorReturn(704, "Admin does not exist."));
            }

            //Check if team exists
            var team = _meshContext.Teams.FirstOrDefault(t => t.Id == request.TeamId);

            if (team == null)
            {
                return(JsonReturnHelper.ErrorReturn(302, "Team does not exist."));
            }

            //Check if admin is in the team
            var teamCheckResult = _permissionCheck.CheckTeamPermission(request.AdminName, team);

            if (teamCheckResult == PermissionCheckHelper.TeamOutsider)
            {
                return(JsonReturnHelper.ErrorReturn(702, "Invalid admin."));
            }

            //Check if user is the admin of the team
            teamCheckResult = _permissionCheck.CheckTeamPermission(request.Username, team);
            if (teamCheckResult != PermissionCheckHelper.TeamAdmin)
            {
                return(JsonReturnHelper.ErrorReturn(701, "Permission denied."));
            }

            var newProject = new Project()
            {
                Name      = request.ProjectName,
                AdminId   = admin.Id,
                TeamId    = team.Id,
                Publicity = request.IsPublic,
                Icon      = AvatarSaveHelper.PutObject("")
            };

            var members = new List <MemInfo> {
                new MemInfo()
                {
                    UserId = admin.Id, Username = admin.Email, Nickname = admin.Nickname, Avatar = AvatarSaveHelper.GetObject(admin.Avatar)
                }
            };

            //Start a transaction to save the project
            using (var transaction = _meshContext.Database.BeginTransaction())
            {
                try
                {
                    _meshContext.Projects.Add(newProject);
                    _meshContext.SaveChanges();
                    _meshContext.Develops.Add(new Develop()
                    {
                        ProjectId = newProject.Id,
                        UserId    = admin.Id
                    });
                    _meshContext.BulletinBoards.Add(new BulletinBoard()
                    {
                        ProjectId = newProject.Id
                    });
                    _meshContext.TaskBoards.Add(new TaskBoard()
                    {
                        ProjectId = newProject.Id
                    });
                    _meshContext.ProjectMemoCollections.Add(new ProjectMemoCollection()
                    {
                        ProjectId = newProject.Id
                    });
                    _meshContext.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    _logger.LogError(e.ToString());
                    return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
                }
            }

            return(ProjectResult(newProject, admin.Nickname));
        }