コード例 #1
0
        private GroupUser MapGroupUserDto(GroupUserDto groupUserDto)
        {
            GroupUser     groupUser = _mapper.Map <GroupUser>(groupUserDto);
            ClientProfile profile   = _database.ClientProfileRepository.GetByName(groupUserDto.Username);

            if (profile != null)
            {
                groupUser.ApplicationUserId = profile.Id;
                return(groupUser);
            }

            return(null);
        }
コード例 #2
0
        public async Task <GroupUserDto> AddUserToGroup(GroupUserDto groupUserDto)
        {
            GroupUser groupUser = MapGroupUserDto(groupUserDto);

            if (groupUser == null)
            {
                return(null);
            }

            groupUser = await _database.GroupUserRepository.Create(groupUser);

            return(await MapGroupUser(groupUser));
        }
コード例 #3
0
        public async Task UserJoinGroupAsync(Guid userId, string slug, CancellationToken cancellationToken)
        {
            if (Guid.Empty == userId)
            {
                throw new ArgumentOutOfRangeException(nameof(userId));
            }
            if (string.IsNullOrEmpty(slug))
            {
                throw new ArgumentOutOfRangeException(nameof(slug));
            }

            var now = _systemClock.UtcNow.UtcDateTime;

            var defaultRole = await _rolesCommand.GetRoleAsync(DefaultRole, cancellationToken);

            var group = await _groupCommand.GetGroupAsync(slug, cancellationToken);

            if (group is null)
            {
                _logger.LogError($"Error: UserJoinGroupAsync - Group not found for slug:{0}", slug);
                throw new KeyNotFoundException("Error: Group not found for slug");
            }

            var groupUser = await _groupCommand.GetGroupUserAsync(userId, group.Id, cancellationToken);

            if (groupUser is not null && !groupUser.Rejected)
            {
                throw new ValidationException(nameof(groupUser.MembershipUser), "User has already requested access to this group");
            }

            groupUser = new GroupUserDto
            {
                Group                   = group.Id,
                MembershipUser          = userId,
                RequestToJoinDateUTC    = now,
                Approved                = group.IsPublic,
                ApprovingMembershipUser = group.IsPublic ? userId : null,
                ApprovedDateUTC         = group.IsPublic ? now : null,
                MembershipRole          = defaultRole.Id,
            };

            await _groupCommand.UserJoinGroupAsync(groupUser, cancellationToken);

            if (!group.IsPublic)
            {
                _ = Task.Run(() => _groupMemberNotificationService.SendApplicationNotificationToGroupAdminAsync(slug, cancellationToken), cancellationToken);
            }
        }
コード例 #4
0
        public ActionResult<GroupUserDto> GetGroupMembers([FromRoute] int id)
        {
            var group = _context.Groups.Find(id);
            if (group == null)
            {
                return NotFound("Could not find group with this id");
            }
            var admins = _context.UserGroups.Where(y => y.GroupId == id).ToList();
            var adminsDto = new List<GroupUserDto>();
            foreach (var admin in admins)
            {
                var adminDto = new GroupUserDto();
                adminDto.IdUser = admin.UserId;
                adminDto.FirstLastname = _context.Users.Find(admin.UserId).FirstName + ' ' + _context.Users.Find(admin.UserId).LastName;
                adminsDto.Add(adminDto);
            }

            return Ok(adminsDto);
        }
コード例 #5
0
        public async Task <GroupUserDto> GetCurrentUser(long groupId)
        {
            GroupUserDto currentUser = await repository.GetGroupUserDto(groupId, CurrentUserId);

            return(currentUser);
        }
コード例 #6
0
        public async Task UserJoinGroupAsync(GroupUserDto groupUser, CancellationToken cancellationToken = default)
        {
            const string query =
                @"IF EXISTS (SELECT [Id] FROM [dbo].[GroupUser] 
                    WHERE        [MembershipUser_Id] = @UserId
					AND	         [Group_Id]			 = @GroupId 
					AND	         [Rejected]			 = 1)
                    BEGIN
                    UPDATE       [dbo].[GroupUser]
                    SET          [Rejected]          = 0
                    WHERE        [MembershipUser_Id] = @UserId
                    AND          [Group_Id]	         = @GroupId
                    END
                    ELSE
                    BEGIN
                    INSERT INTO  [dbo].[GroupUser]
                                 ([Id]
                                ,[Approved]
                                ,[Rejected]
                                ,[Locked]
                                ,[Banned]
                                ,[RequestToJoinDateUTC]
                                ,[ApprovedToJoinDateUTC]
                                ,[RequestToJoinReason]
                                ,[LockReason]
                                ,[BanReason]
                                ,[ApprovingMembershipUser_Id]
                                ,[MembershipRole_Id]
                                ,[MembershipUser_Id]
                                ,[Group_Id])
                    VALUES
                                (NEWID()
                                ,@Approved
                                ,@Rejected
                                ,@Locked
                                ,@Banned
                                ,@RequestToJoinDate
                                ,@ApprovedToJoinDate
                                ,@RequestToJoinReason
                                ,@LockReason
                                ,@BanReason
                                ,@ApprovingUser
                                ,@Role
                                ,@UserId
                                ,@GroupId)
                    END";

            var queryDefinition = new CommandDefinition(query, new
            {
                GroupId             = groupUser.Group,
                UserId              = groupUser.MembershipUser,
                Approved            = groupUser.Approved,
                Rejected            = groupUser.Rejected,
                Locked              = groupUser.Locked,
                Banned              = groupUser.Banned,
                RequestToJoinDate   = groupUser.RequestToJoinDateUTC,
                ApprovedToJoinDate  = groupUser.ApprovedDateUTC,
                RequestToJoinReason = groupUser.RequestToJoinReason,
                LockReason          = groupUser.LockReason,
                BanReason           = groupUser.BanReason,
                ApprovingUser       = groupUser.ApprovingMembershipUser,
                Role = groupUser.MembershipRole
            }, cancellationToken: cancellationToken);

            using var dbConnection = await _connectionFactory.GetReadWriteConnectionAsync(cancellationToken);

            var result = await dbConnection.ExecuteAsync(queryDefinition);

            if (result != 1)
            {
                _logger.LogError($"Error: User request to join group was not added User:{0}, Group:{1} ", groupUser.MembershipUser, groupUser.Group);
                throw new DBConcurrencyException("Error: User request to join group was not added");
            }
        }