Files
EventSnap/backend/migrations/003_indexes.up.sql
fabi e976f0f670 feat: add database schema and SQLx migrations
- 5 reversible migrations: extensions/enums, tables, indexes, views, config seed
- Tables: event, user, session, upload, hashtag, upload_hashtag, comment,
  comment_hashtag, like, export_job, config
- Views: v_feed (uploads with like/comment counts), v_hashtag_counts
- Indexes optimised for feed queries, session lookup, hashtag filtering
- Config table seeded with default rate limits and quotas
- db.rs module: PgPool creation with auto-migration on startup
- docker-compose.override.yml: expose db port 5432 for local dev
- Fix crate names: async_zip, tower_governor (underscore, not hyphen)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 21:15:25 +02:00

42 lines
1.1 KiB
SQL

-- Feed main query (covers >90% of all DB requests)
CREATE INDEX idx_upload_event_created
ON upload(event_id, created_at DESC)
WHERE deleted_at IS NULL;
-- A user's own uploads (quota check, "My Account")
CREATE INDEX idx_upload_user
ON upload(user_id)
WHERE deleted_at IS NULL;
-- Comments per upload
CREATE INDEX idx_comment_upload
ON comment(upload_id)
WHERE deleted_at IS NULL;
-- Like count per upload
CREATE INDEX idx_like_upload
ON "like"(upload_id);
-- Hashtag filtering
CREATE INDEX idx_upload_hashtag_hashtag
ON upload_hashtag(hashtag_id);
CREATE INDEX idx_hashtag_event_tag
ON hashtag(event_id, tag);
-- Session lookup (runs on every authenticated API request)
CREATE UNIQUE INDEX idx_session_token_hash
ON session(token_hash);
-- Expired session cleanup
CREATE INDEX idx_session_expires
ON session(expires_at);
-- User lookup for recovery flow
CREATE INDEX idx_user_event_name
ON "user"(event_id, display_name);
-- Export job status
CREATE UNIQUE INDEX idx_export_job_event_type
ON export_job(event_id, type);