forked from jmug/cactoide
feat: add db-seed to makefile and merge migrations
This commit is contained in:
14
Makefile
14
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
|
# 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..."
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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);
|
|
||||||
@@ -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'));
|
|
||||||
Reference in New Issue
Block a user