예제 #1
0
        public async static Task <Column> GetColumn(this ProjectContext db, string userEmail, GetColumnForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var role = await db.Roles.AsNoTracking().FirstOrDefaultAsync(x => x.User == user && x.Project.Id == form.ProjectId);

            if (role == null)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(null);
            }

            var column = await db.Columns.FirstOrDefaultAsync(x => x.Sprint.Id == form.SprintId);

            if (column == null)
            {
                _code = ControllerErrorCode.ColumnNotFound;
                return(null);
            }

            return(column);
        }
예제 #2
0
        public async static Task <bool> RemoveColumn(this ProjectContext db, string userEmail, RemoveColumnForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(false);
            }

            var column = await db.Columns.FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.Id == form.ColumnId);

            if (column == null)
            {
                _code = ControllerErrorCode.ColumnNotFound;
                return(false);
            }

            var role = await db.Roles.FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.User == user);

            if (role == null || role.Type != ProjectUserRole.ProjectManager)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(false);
            }

            db.Columns.Remove(column);

            await db.SaveChangesAsync();

            return(true);
        }
        public async static Task <Sprint> AddSprintAsync(this ProjectContext db, string userEmail, AddSprintForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var role = await db.Roles.Include(y => y.Project).FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.User == user);

            if (role == null || role.Type != ProjectUserRole.ProjectManager)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(null);
            }

            var sprint = new Sprint
            {
                Name       = form.SprintName,
                Project    = role.Project,
                ExpireDate = form.ExprieDate
            };

            await db.Sprints.AddAsync(sprint);

            await db.SaveChangesAsync();

            return(sprint);
        }
        public async static Task <bool> ChangeSprintName(this ProjectContext db, string userEmail, ChangeSprintNameForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(false);
            }

            var sprint = await db.Sprints.Include(x => x.Project).FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.Id == form.SprintId);

            if (sprint == null)
            {
                _code = ControllerErrorCode.SprintNotFound;
                return(false);
            }

            var role = await db.Roles.FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.User == user);

            if (role == null || role.Type != ProjectUserRole.ProjectManager)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(false);
            }

            sprint.Name = form.NewName;

            await db.SaveChangesAsync();

            return(true);
        }
예제 #5
0
        public static async Task <bool> DeleteProjectAsync(this ProjectContext db, string userEmail, int projectId)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(false);
            }

            var project = await db.Projects.FirstOrDefaultAsync(x => x.Id == projectId);

            if (project == null)
            {
                _code = ControllerErrorCode.ProjectNotFound;
                return(false);
            }

            var role = await db.Roles.AsNoTracking().FirstOrDefaultAsync(x => x.Project.Id == projectId && x.User.Id == user.Id);

            if (role == null || role.Type != ProjectUserRole.ProjectManager)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(false);
            }

            db.Projects.Remove(project);

            await db.SaveChangesAsync();

            return(true);
        }
        public async static Task <IEnumerable <Sprint> > GetSprints(this ProjectContext db, string userEmail, GetSprintsForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var role = await db.Roles.FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.User == user);

            if (role == null)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(null);
            }

            var sprints = await db.Sprints.Where(x => x.Project.Id == form.ProjectId).ToListAsync();

            if (sprints == null)
            {
                _code = ControllerErrorCode.SprintNotFound;
                return(null);
            }

            return(sprints);
        }
예제 #7
0
        public static async Task <Project> CreateProject(this ProjectContext db, string userEmail, string projectName)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var project = new Project
            {
                Name         = projectName,
                CreationDate = DateTime.UtcNow
            };

            var role = new Role
            {
                Type    = ProjectUserRole.ProjectManager,
                Project = project,
                User    = user
            };

            await db.Projects.AddAsync(project);

            await db.Roles.AddAsync(role);

            await db.SaveChangesAsync();

            return(project);
        }
예제 #8
0
        public async static Task <IEnumerable <Card> > GetCards(this ProjectContext db, string userEmail, GetCardsForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var role = await db.Roles.AsNoTracking().FirstOrDefaultAsync(x => x.User == user && x.Project.Id == form.ProjectId);

            if (role == null)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(null);
            }

            var cards = await db.Cards.Where(x => x.Column.Id == form.ColumnId).ToListAsync();

            if (cards == null)
            {
                _code = ControllerErrorCode.CardNotFound;
                return(null);
            }

            return(cards);
        }
예제 #9
0
        public static async Task <bool> AddUserToProjectAsync(this ProjectContext db, string fromEmail, AddUserToProjectForm form)
        {
            var fromUser = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(fromEmail, StringComparison.OrdinalIgnoreCase));

            var toUser = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(form.UserEmail, StringComparison.OrdinalIgnoreCase));

            if (fromUser == null || toUser == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(false);
            }

            var project = await db.Projects.FirstOrDefaultAsync(x => x.Id == form.ProjectId);

            if (project == null)
            {
                _code = ControllerErrorCode.ProjectNotFound;
                return(false);
            }

            var fromUserRole = db.Roles.AsNoTracking().FirstOrDefault(x => x.User.Id == fromUser.Id && x.Project.Id == project.Id);

            var toUserRole = db.Roles.FirstOrDefault(x => x.Project.Id == form.ProjectId && x.User.Id == toUser.Id);

            if (fromUserRole == null || fromUserRole.Type != ProjectUserRole.ProjectManager)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(false);
            }

            if (toUserRole != null)
            {
                db.Remove(toUserRole);
            }

            var newRole = new Role()
            {
                Project = project,
                User    = toUser,
                Type    = form.Role
            };

            await db.Roles.AddAsync(newRole);

            await db.SaveChangesAsync();

            return(true);
        }
예제 #10
0
        public static async Task <IEnumerable <Project> > GetProjects(this ProjectContext db, string userEmail)
        {
            var user = await db.Users.AsNoTracking().FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var roles = await db.Roles.AsNoTracking().Include(x => x.Project).Where(x => x.User.Id == user.Id).ToListAsync();

            if (roles == null)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(null);
            }

            var projects = roles.Select(x => x.Project);

            return(projects);
        }
예제 #11
0
        public async static Task <Card> AddCard(this ProjectContext db, string userEmail, AddCardForm form)
        {
            var user = await db.Users.FirstOrDefaultAsync(x => x.Email.Equals(userEmail, StringComparison.OrdinalIgnoreCase));

            if (user == null)
            {
                _code = ControllerErrorCode.UserNotFound;
                return(null);
            }

            var role = await db.Roles.Include(y => y.Project).FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.User == user);

            if (role == null || role.Type != ProjectUserRole.ProjectManager)
            {
                _code = ControllerErrorCode.PermissionsDenied;
                return(null);
            }

            var column = await db.Columns.FirstOrDefaultAsync(x => x.Project.Id == form.ProjectId && x.Id == form.ColumnId);

            if (column == null)
            {
                _code = ControllerErrorCode.SprintNotFound;
                return(null);
            }


            var card = new Card
            {
                Column = column,
                Text   = form.Name
            };

            await db.Cards.AddAsync(card);

            await db.SaveChangesAsync();

            return(card);
        }