From 52d48e4839b3369a03bd9a7dad3f237c2c2ff67a Mon Sep 17 00:00:00 2001 From: Levente Orban Date: Mon, 10 Nov 2025 09:59:44 +0100 Subject: [PATCH] feat: add db-seed to makefile and merge migrations --- Makefile | 14 ++++++++++- database/init.sql | 15 ++++++++++- .../20241220_001_add_invite_only_events.sql | 25 ------------------- ...20_001_add_invite_only_events_rollback.sql | 17 ------------- 4 files changed, 27 insertions(+), 44 deletions(-) delete mode 100644 database/migrations/20241220_001_add_invite_only_events.sql delete mode 100644 database/migrations/20241220_001_add_invite_only_events_rollback.sql diff --git a/Makefile b/Makefile index fa4acf4..cce5165 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: help build up down db-only logs db-clean prune i18n lint format migrate-up migrate-down +.PHONY: help build up down db-only db-seed logs db-clean prune i18n lint format migrate-up migrate-down # Database connection variables DB_HOST ?= localhost @@ -19,6 +19,7 @@ help: @echo " up - Start all services" @echo " down - Stop all services" @echo " db-only - Start only the database" + @echo " db-seed - Seed the database with sample data" @echo " logs - Show logs from all services" @echo " db-clean - Clean up all Docker resources" @echo " prune - Clean up everything (containers, images, volumes)" @@ -73,6 +74,17 @@ db-only: @echo "Starting only the database..." docker compose up -d postgres +# Seed the database with sample data +db-seed: + @echo "Seeding database with sample data..." + @if [ -f "database/seed.sql" ]; then \ + psql "$(DB_URL)" -f database/seed.sql && \ + echo "Database seeded successfully!"; \ + else \ + echo "Seed file not found: database/seed.sql"; \ + exit 1; \ + fi + # Show logs from all services logs: @echo "Showing logs from all services..." diff --git a/database/init.sql b/database/init.sql index a65afd6..816e899 100644 --- a/database/init.sql +++ b/database/init.sql @@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS events ( type VARCHAR(20) NOT NULL CHECK (type IN ('limited','unlimited')), attendee_limit INTEGER CHECK (attendee_limit > 0), user_id VARCHAR(100) NOT NULL, - visibility VARCHAR(20) NOT NULL DEFAULT 'public' CHECK (visibility IN ('public','private')), + visibility VARCHAR(20) NOT NULL DEFAULT 'public' CHECK (visibility IN ('public','private', 'invite-only')), created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); @@ -34,6 +34,15 @@ CREATE TABLE IF NOT EXISTS rsvps ( updated_at TIMESTAMPTZ DEFAULT NOW() ); +-- Invite tokens +CREATE TABLE IF NOT EXISTS invite_tokens ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + event_id VARCHAR(8) NOT NULL REFERENCES events(id) ON DELETE CASCADE, + token VARCHAR(32) NOT NULL UNIQUE, + expires_at TIMESTAMPTZ NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW() +); + -- ======================================= -- Indexes -- ======================================= @@ -42,5 +51,9 @@ CREATE INDEX IF NOT EXISTS idx_events_date ON events(date); CREATE INDEX IF NOT EXISTS idx_events_location_type ON events(location_type); CREATE INDEX IF NOT EXISTS idx_rsvps_event_id ON rsvps(event_id); CREATE INDEX IF NOT EXISTS idx_rsvps_user_id ON rsvps(user_id); +CREATE INDEX IF NOT EXISTS idx_invite_tokens_event_id ON invite_tokens(event_id); +CREATE INDEX IF NOT EXISTS idx_invite_tokens_token ON invite_tokens(token); +CREATE INDEX IF NOT EXISTS idx_invite_tokens_expires_at ON invite_tokens(expires_at); + COMMIT; \ No newline at end of file diff --git a/database/migrations/20241220_001_add_invite_only_events.sql b/database/migrations/20241220_001_add_invite_only_events.sql deleted file mode 100644 index 442e393..0000000 --- a/database/migrations/20241220_001_add_invite_only_events.sql +++ /dev/null @@ -1,25 +0,0 @@ --- Migration: Add invite-only events feature --- Created: 2024-12-20 --- Description: Adds invite-only visibility option and invite tokens table - --- Add 'invite-only' to the visibility enum -ALTER TABLE events -DROP CONSTRAINT IF EXISTS events_visibility_check; - -ALTER TABLE events -ADD CONSTRAINT events_visibility_check -CHECK (visibility IN ('public', 'private', 'invite-only')); - --- Create invite_tokens table -CREATE TABLE IF NOT EXISTS invite_tokens ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - event_id VARCHAR(8) NOT NULL REFERENCES events(id) ON DELETE CASCADE, - token VARCHAR(32) NOT NULL UNIQUE, - expires_at TIMESTAMPTZ NOT NULL, - created_at TIMESTAMPTZ DEFAULT NOW() -); - --- Create indexes for invite_tokens table -CREATE INDEX IF NOT EXISTS idx_invite_tokens_event_id ON invite_tokens(event_id); -CREATE INDEX IF NOT EXISTS idx_invite_tokens_token ON invite_tokens(token); -CREATE INDEX IF NOT EXISTS idx_invite_tokens_expires_at ON invite_tokens(expires_at); diff --git a/database/migrations/20241220_001_add_invite_only_events_rollback.sql b/database/migrations/20241220_001_add_invite_only_events_rollback.sql deleted file mode 100644 index 3fb0261..0000000 --- a/database/migrations/20241220_001_add_invite_only_events_rollback.sql +++ /dev/null @@ -1,17 +0,0 @@ --- Rollback Migration: Remove invite-only events feature --- Created: 2024-12-20 --- Description: Removes invite-only visibility option and invite tokens table - --- Drop invite_tokens table and its indexes -DROP INDEX IF EXISTS idx_invite_tokens_expires_at; -DROP INDEX IF EXISTS idx_invite_tokens_token; -DROP INDEX IF EXISTS idx_invite_tokens_event_id; -DROP TABLE IF EXISTS invite_tokens; - --- Revert visibility enum to original values -ALTER TABLE events -DROP CONSTRAINT IF EXISTS events_visibility_check; - -ALTER TABLE events -ADD CONSTRAINT events_visibility_check -CHECK (visibility IN ('public', 'private'));