Initial commit: Portfolio Website
Vollständige Next.js 15 Portfolio-Website mit: - Blog-System mit 100+ Artikeln - Supabase-Integration - Responsive Design mit Tailwind CSS - TypeScript-Konfiguration - Testing-Setup mit Vitest und Playwright Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
-- Create rate_limits table for persistent rate limiting
|
||||
-- This replaces the in-memory Map-based rate limiter
|
||||
|
||||
CREATE TABLE IF NOT EXISTS rate_limits (
|
||||
-- Unique identifier (typically IP address)
|
||||
identifier TEXT NOT NULL,
|
||||
|
||||
-- Number of requests in the current time window
|
||||
count INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
-- Start of the rate limit window (for sliding window algorithm)
|
||||
window_start TIMESTAMPTZ NOT NULL,
|
||||
|
||||
-- Timestamp when the record was created
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
-- Timestamp when the record was last updated
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
-- Primary key ensures one record per identifier per time window
|
||||
PRIMARY KEY (identifier, window_start)
|
||||
);
|
||||
|
||||
-- Index for fast lookups by identifier and window_start
|
||||
-- This is critical for rate limiting performance
|
||||
CREATE INDEX IF NOT EXISTS idx_rate_limits_identifier_window
|
||||
ON rate_limits(identifier, window_start DESC);
|
||||
|
||||
-- Index for cleanup queries (to remove old rate limit records)
|
||||
CREATE INDEX IF NOT EXISTS idx_rate_limits_window_start
|
||||
ON rate_limits(window_start);
|
||||
|
||||
-- Add a comment to the table
|
||||
COMMENT ON TABLE rate_limits IS 'Stores rate limiting data for API endpoints. Each record tracks request counts within a time window for a specific identifier (typically IP address).';
|
||||
|
||||
-- Add comments to columns for documentation
|
||||
COMMENT ON COLUMN rate_limits.identifier IS 'Unique identifier for the client (typically IP address)';
|
||||
COMMENT ON COLUMN rate_limits.count IS 'Number of requests made in the current time window';
|
||||
COMMENT ON COLUMN rate_limits.window_start IS 'Start timestamp of the rate limit window';
|
||||
COMMENT ON COLUMN rate_limits.created_at IS 'Timestamp when this record was first created';
|
||||
COMMENT ON COLUMN rate_limits.updated_at IS 'Timestamp when this record was last updated';
|
||||
Reference in New Issue
Block a user