Пример #1
0
        public async Task <Result <string> > UpdateRole(int memberId, int role)
        {
            await using var context = Context;

            Member member = await context.Members.FindAsync(memberId);

            if (member == null)
            {
                return(new Result <string> {
                    ResultType = ResultType.NotFound, Message = "Member not found."
                });
            }

            Project project = await context.Projects.FindAsync(member.ProjectId);

            if (project == null)
            {
                return(new Result <string> {
                    ResultType = ResultType.NotFound, Message = "Corresponding project not found."
                });
            }

            bool userIsOwner = context.Members
                               .Any(m => m.ProjectId == project.ProjectId && m.Role == MemberRole.Owner && m.UserId == _userId);

            if (!userIsOwner)
            {
                return(new Result <string> {
                    ResultType = ResultType.Forbidden, Message = "You don't have permission for this."
                });
            }

            User notifier = await context.Users.FindAsync(_userId);

            IReadOnlyCollection <User> userToNotify = await context.Users.Where(u => u.UserId == member.UserId).ToListAsync();

            var notificationBuilder = new NotificationBuilder(notifier, userToNotify);
            IReadOnlyCollection <Notification> notifications = notificationBuilder.BuildChangeRoleNotifications(project, role);

            member.Role = role;
            context.Members.Update(member);
            await context.Notifications.AddRangeAsync(notifications);

            await context.SaveChangesAsync();

            return(new Result <string> {
                ResultType = ResultType.Ok, Message = "Changed role"
            });
        }