/// <inheritdoc />
        public async Task AddDesignatedRoleAsync(ulong guildId, ulong roleId, DesignatedRoleType type)
        {
            AuthorizationService.RequireAuthenticatedUser();
            AuthorizationService.RequireClaims(AuthorizationClaim.DesignatedRoleMappingCreate);

            using (var transaction = await DesignatedRoleMappingRepository.BeginCreateTransactionAsync())
            {
                if (await DesignatedRoleMappingRepository.AnyAsync(new DesignatedRoleMappingSearchCriteria()
                {
                    GuildId = guildId,
                    RoleId = roleId,
                    Type = type,
                    IsDeleted = false
                }))
                {
                    throw new InvalidOperationException($"Role {roleId} already has a {type} designation");
                }

                await DesignatedRoleMappingRepository.CreateAsync(new DesignatedRoleMappingCreationData()
                {
                    GuildId     = guildId,
                    RoleId      = roleId,
                    Type        = type,
                    CreatedById = AuthorizationService.CurrentUserId.Value
                });

                transaction.Commit();
            }
        }
 public Task <bool> RolesHaveDesignationAsync(
     ulong guildId,
     IReadOnlyCollection <ulong> roleIds,
     DesignatedRoleType designation,
     CancellationToken cancellationToken)
 => DesignatedRoleMappingRepository.AnyAsync(new DesignatedRoleMappingSearchCriteria()
 {
     GuildId   = guildId,
     RoleIds   = roleIds,
     IsDeleted = false,
     Type      = designation
 }, default);
 public Task <bool> RoleHasDesignationAsync(
     ulong guildId,
     ulong roleId,
     DesignatedRoleType designation,
     CancellationToken cancellationToken)
 => DesignatedRoleMappingRepository.AnyAsync(new DesignatedRoleMappingSearchCriteria
 {
     GuildId   = guildId,
     RoleId    = roleId,
     IsDeleted = false,
     Type      = designation
 }, default);