2
0
forked from jmug/cactoide

feat: add db-seed to makefile and merge migrations

This commit is contained in:
Levente Orban
2025-11-10 09:59:44 +01:00
parent 5b7178bec1
commit 52d48e4839
4 changed files with 27 additions and 44 deletions

View File

@@ -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 # Database connection variables
DB_HOST ?= localhost DB_HOST ?= localhost
@@ -19,6 +19,7 @@ help:
@echo " up - Start all services" @echo " up - Start all services"
@echo " down - Stop all services" @echo " down - Stop all services"
@echo " db-only - Start only the database" @echo " db-only - Start only the database"
@echo " db-seed - Seed the database with sample data"
@echo " logs - Show logs from all services" @echo " logs - Show logs from all services"
@echo " db-clean - Clean up all Docker resources" @echo " db-clean - Clean up all Docker resources"
@echo " prune - Clean up everything (containers, images, volumes)" @echo " prune - Clean up everything (containers, images, volumes)"
@@ -73,6 +74,17 @@ db-only:
@echo "Starting only the database..." @echo "Starting only the database..."
docker compose up -d postgres 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 # Show logs from all services
logs: logs:
@echo "Showing logs from all services..." @echo "Showing logs from all services..."

View File

@@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS events (
type VARCHAR(20) NOT NULL CHECK (type IN ('limited','unlimited')), type VARCHAR(20) NOT NULL CHECK (type IN ('limited','unlimited')),
attendee_limit INTEGER CHECK (attendee_limit > 0), attendee_limit INTEGER CHECK (attendee_limit > 0),
user_id VARCHAR(100) NOT NULL, 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(), created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW() updated_at TIMESTAMPTZ DEFAULT NOW()
); );
@@ -34,6 +34,15 @@ CREATE TABLE IF NOT EXISTS rsvps (
updated_at TIMESTAMPTZ DEFAULT NOW() 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 -- 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_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_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_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; COMMIT;

View File

@@ -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);

View File

@@ -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'));