public void ShouldAddGuildIdToTheValue(
            string guildId,
            string userId
            )
        {
            var parameters = new Dictionary <string, string>
            {
                ["guild.id"] = guildId,
                ["user.id"]  = userId,
            };

            var majorParameters = new MajorParameters(parameters);

            majorParameters.Should().Be($"/{guildId}");
        }
        public void ShouldAddWebhookIdAndTokenToTheValue(
            string webhookId,
            string webhookToken
            )
        {
            var parameters = new Dictionary <string, string>
            {
                ["webhook.id"]    = webhookId,
                ["webhook.token"] = webhookToken,
            };

            var majorParameters = new MajorParameters(parameters);

            majorParameters.Should().Be($"/{webhookId}/{webhookToken}");
        }
        public void ShouldAddChannelIdToTheValue(
            string channelId,
            string messageId
            )
        {
            var parameters = new Dictionary <string, string>
            {
                ["channel.id"] = channelId,
                ["message.id"] = messageId,
            };

            var majorParameters = new MajorParameters(parameters);

            majorParameters.Should().Be($"/{channelId}");
        }
        /// <inheritdoc />
        public async Task <Bucket?> FindByEndpointAndMajorParameters(Endpoint endpoint, MajorParameters parameters, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var endpointValue = Convert.ToUInt64(endpoint.Value);
            var query         = databaseContext.Buckets.FromSqlInterpolated(
                $@"select * from Buckets 
                    where ApiCategory={endpoint.Category}
                    and (Endpoints & {endpointValue}) = {endpointValue}
                    and MajorParameters = {parameters.Value}
                    limit 1
                    for update
                "
                );

            return(await query.FirstOrDefaultAsync(cancellationToken));
        }
        /// <inheritdoc />
        public async Task <Bucket?> FindByRemoteIdAndMajorParameters(string remoteId, MajorParameters parameters, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var query = databaseContext.Buckets.FromSqlInterpolated(
                $@"select * from Buckets 
                    where RemoteId={remoteId}
                    and MajorParameters={parameters.Value}
                    for update
                "
                );

            return(await query.FirstOrDefaultAsync(cancellationToken));
        }