Пример #1
0
        public async Task <Result <string> > DeleteMember(int memberId)
        {
            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.BuildRemoveMemberNotifications(project);

            context.Members.Remove(member);
            await context.Notifications.AddRangeAsync(notifications);

            await context.SaveChangesAsync();

            return(new Result <string> {
                ResultType = ResultType.Deleted, Message = "Removed"
            });
        }