예제 #1
0
        public JsonResult ProjectResult(Project project, string name)
        {
            var develops = _meshContext.Develops
                           .Where(d => d.ProjectId == project.Id)
                           .Join(_meshContext.Users, d => d.UserId, u => u.Id, (d, u) => new MemInfo()
            {
                UserId   = u.Id,
                Username = u.Email,
                Nickname = u.Nickname,
                Avatar   = AvatarSaveHelper.GetObject(u.Avatar)
            })
                           .ToList();

            return(Json(new
            {
                err_code = 0,
                data = new
                {
                    isSuccess = true,
                    msg = "",
                    project = new
                    {
                        projectId = project.Id,
                        projectName = project.Name,
                        adminName = name,
                        isPublic = project.Publicity,
                        projectLogo = AvatarSaveHelper.GetObject(project.Icon),
                        members = develops
                    }
                }
            }));
        }
예제 #2
0
        public JsonResult UserReturnValue(User user)
        {
            //Find teams of the user
            var cooperation = _meshContext.Cooperations
                              .Where(b => b.UserId == user.Id);
            var teams = _meshContext.Teams
                        .Join(cooperation, t => t.Id, c => c.TeamId, (t, c) =>
                              new TeamInfo
            {
                TeamId     = t.Id,
                TeamName   = t.Name,
                AdminId    = t.AdminId,
                CreateTIme = t.CreatedTime.ToString(),
                AdminName  = _meshContext.Users.First(u => u.Id == t.AdminId).Nickname
            }).ToList();

            var preferenceTeamId = -1;

            if (cooperation.FirstOrDefault() != null)
            {
                var preferenceTeamCount = cooperation.DefaultIfEmpty().Max(a => a.AccessCount);
                preferenceTeamId = cooperation.First(c => c.AccessCount == preferenceTeamCount).TeamId;
            }

            return(Json(new
            {
                err_code = 0,
                data = new
                {
                    isSuccess = true,
                    msg = "",
                    username = user.Email,
                    nickname = user.Nickname,
                    gender = user.Gender,
                    status = user.Status,
                    description = user.Description,
                    birthday = user.Birthday.ToLongDateString(),
                    avatar = AvatarSaveHelper.GetObject(user.Avatar),
                    role = "user",
                    preference = new
                    {
                        preferenceColor = user.ColorPreference,
                        preferenceLayout = user.LayoutPreference,
                        preferenceShowMode = user.RevealedPreference,
                        preferenceTeam = preferenceTeamId
                    },

                    teams = teams
                }
            }));
        }
예제 #3
0
        public JsonResult QueryUser(string username, string keyword)
        {
            if (!CornerCaseCheckHelper.Check(username, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(104, "Invalid username."));
            }

            if (!CornerCaseCheckHelper.Check(keyword, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(457, "Invalid keyword."));
            }

            if (HttpContext.Session.IsAvailable && HttpContext.Session.GetString(username) == null)
            {
                return(JsonReturnHelper.ErrorReturn(2, "User status error."));
            }

            var userAccordingToUsername = _meshContext.Users
                                          .Where(u => u.Email.Contains(keyword));
            var userAccordingToNickname = _meshContext.Users
                                          .Where(u => u.Nickname.Contains(keyword));
            var userAccordingToDescription = _meshContext.Users
                                             .Where(u => u.Description.Contains(keyword));

            var users = userAccordingToUsername
                        .Union(userAccordingToNickname)
                        .Union(userAccordingToDescription)
                        .Select(u => new
            {
                username    = u.Email,
                avatar      = AvatarSaveHelper.GetObject(u.Avatar),
                nickname    = u.Nickname,
                gender      = u.Gender,
                status      = u.Status,
                address     = u.Address,
                description = u.Description,
                birthday    = u.Birthday
            })
                        .ToList();


            return(Json(new
            {
                err_code = 0,
                data = new
                {
                    users = users
                }
            }));
        }
예제 #4
0
        public JsonResult UpdateUserInformation(UserInfo request)
        {
            if (!CornerCaseCheckHelper.Check(request.username, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(104, "Invalid username"));
            }

            if (HttpContext.Session.GetString(request.username) == null)
            {
                return(JsonReturnHelper.ErrorReturn(2, "User status error."));
            }

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

            if (!CornerCaseCheckHelper.Check(request.birthday, 0, CornerCaseCheckHelper.Time))
            {
                return(JsonReturnHelper.ErrorReturn(121, "Invalid birthday."));
            }

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

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

            try
            {
                user.Nickname    = request.nickname;
                user.Gender      = request.gender;
                user.Status      = request.status;
                user.Address     = request.address;
                user.Description = request.description;
                user.Birthday    = Convert.ToDateTime(request.birthday);
                user.Avatar      = AvatarSaveHelper.PutObject(request.avatar, user.Avatar);
                _meshContext.Users.Update(user);
                _meshContext.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
            }

            return(UserReturnValue(user));
        }
예제 #5
0
        public JsonResult Register(UserRequest request)
        {
            if (!CornerCaseCheckHelper.Check(request.username, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(104, "Invalid username"));
            }

            if (!CornerCaseCheckHelper.Check(request.password, 0, CornerCaseCheckHelper.PassWord))
            {
                return(JsonReturnHelper.ErrorReturn(111, "Invalid password."));
            }

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

            if (user != null)
            {
                return(JsonReturnHelper.ErrorReturn(101, "User already exists."));
            }
            HashPassword hashPassword = GetHashPassword(request.password);
            //Create new user
            var newUser = new User()
            {
                Email              = request.username,
                Nickname           = request.username,
                PasswordDigest     = hashPassword.PasswordDigest,
                PasswordSalt       = hashPassword.PasswordSalt,
                Avatar             = AvatarSaveHelper.PutObject(""),
                ColorPreference    = "blue",
                LayoutPreference   = "default",
                RevealedPreference = "card"
            };

            //try to save the user
            try
            {
                _meshContext.Users.Add(newUser);
                _meshContext.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
            }

            return(UserReturnValue(newUser));
        }
예제 #6
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
                    }
                }
            }));
        }
        public JsonResult QueryUserInfo(string username, string keyword)
        {
            var checkResult = CheckUsername(username);

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

            if (!CornerCaseCheckHelper.Check(keyword, 50, CornerCaseCheckHelper.Username))
            {
                return(JsonReturnHelper.ErrorReturn(130, "Invalid keyword."));
            }

            var usersAccordingToUsername = _meshContext.Users
                                           .Where(u => u.Email.Contains(keyword));
            var usersAccordingToNickname = _meshContext.Users
                                           .Where(u => u.Nickname.Contains(keyword));
            var usersAccordingToDescription = _meshContext.Users
                                              .Where(u => u.Description.Contains(keyword));
            var usersUnion = usersAccordingToUsername
                             .Union(usersAccordingToNickname)
                             .Union(usersAccordingToDescription)
                             .ToList();

            var users = new List <UserInfo>();

            foreach (var u in usersUnion)
            {
                var cooperation = _meshContext.Cooperations
                                  .Where(c => c.UserId == u.Id)
                                  .OrderByDescending(c => c.AccessCount)
                                  .FirstOrDefault();
                var teams = _meshContext.Cooperations
                            .Where(c => c.UserId == u.Id)
                            .Join(_meshContext.Teams, c => c.TeamId, t => t.Id, (c, t) => new TeamInfo()
                {
                    TeamId     = t.Id,
                    TeamName   = t.Name,
                    AdminId    = t.AdminId,
                    AdminName  = _meshContext.Users.First(s => s.Id == t.AdminId).Nickname,
                    CreateTIme = t.CreatedTime.ToString()
                })
                            .ToList();
                users.Add(new UserInfo()
                {
                    username    = u.Email,
                    address     = u.Address,
                    avatar      = AvatarSaveHelper.GetObject(u.Avatar),
                    birthday    = u.Birthday.ToString(),
                    description = u.Description,
                    preference  = new UserPreference()
                    {
                        preferenceColor    = u.ColorPreference,
                        preferenceLayout   = u.LayoutPreference,
                        preferenceShowMode = u.RevealedPreference,
                        preferenceTeam     = cooperation?.TeamId ?? -1
                    },
                    teams = teams
                });
            }

            return(Json(new
            {
                err_code = 0,
                data = new
                {
                    isSuccess = true,
                    msg = "",
                    users = users
                }
            }));
        }
예제 #8
0
        public JsonResult UpdateProject(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.ProjectId, 0, CornerCaseCheckHelper.Id))
            {
                return(JsonReturnHelper.ErrorReturn(701, "Invalid projectId."));
            }

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

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

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

            //Check if project exists
            var project = _meshContext.Projects.FirstOrDefault(p => p.Id == request.ProjectId);

            if (project == null)
            {
                return(JsonReturnHelper.ErrorReturn(707, "Invalid projectId."));
            }

            //Check if user in the team
            var teamCheckResult = _permissionCheck.CheckTeamPermission(request.Username, team);

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

            //Check if user is the admin of the project
            var projectCheckResult = _permissionCheck.CheckProjectPermission(request.Username, project);

            if (projectCheckResult != PermissionCheckHelper.ProjectAdmin)
            {
                return(JsonReturnHelper.ErrorReturn(701, "Permission denied."));
            }


            try
            {
                project.Publicity = request.IsPublic;
                project.Name      = request.ProjectName;
                project.Icon      = AvatarSaveHelper.PutObject(request.ProjectLogo, project.Icon);
                _meshContext.Projects.Update(project);
                _meshContext.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.ToString());
                return(JsonReturnHelper.ErrorReturn(1, "Unexpected error."));
            }

            var user = _meshContext.Users.First(u => u.Id == project.AdminId);

            return(ProjectResult(project, user.Nickname));
        }
예제 #9
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));
        }