Initial commit
This commit is contained in:
67
migrations/001_initial_schema.sql
Normal file
67
migrations/001_initial_schema.sql
Normal file
@@ -0,0 +1,67 @@
|
||||
-- Migration 001: Initial Schema
|
||||
-- Creates the core tables for the weight tracker app
|
||||
|
||||
-- Users table
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
display_name VARCHAR(100),
|
||||
height_cm DECIMAL(5,1),
|
||||
age INTEGER,
|
||||
gender VARCHAR(20),
|
||||
goal_weight_kg DECIMAL(5,1),
|
||||
starting_weight_kg DECIMAL(5,1),
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Check-ins table
|
||||
CREATE TABLE IF NOT EXISTS checkins (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||
weight_kg DECIMAL(5,1) NOT NULL,
|
||||
bmi DECIMAL(4,1),
|
||||
notes TEXT,
|
||||
checked_in_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Milestones table
|
||||
CREATE TABLE IF NOT EXISTS milestones (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||
milestone_key VARCHAR(50) NOT NULL,
|
||||
achieved_at TIMESTAMP DEFAULT NOW(),
|
||||
UNIQUE(user_id, milestone_key)
|
||||
);
|
||||
|
||||
-- Challenges table
|
||||
CREATE TABLE IF NOT EXISTS challenges (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
target_type VARCHAR(30) NOT NULL,
|
||||
target_value DECIMAL(8,2) NOT NULL,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Challenge participants
|
||||
CREATE TABLE IF NOT EXISTS challenge_participants (
|
||||
id SERIAL PRIMARY KEY,
|
||||
challenge_id INTEGER REFERENCES challenges(id) ON DELETE CASCADE,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||
completed BOOLEAN DEFAULT FALSE,
|
||||
completed_at TIMESTAMP,
|
||||
UNIQUE(challenge_id, user_id)
|
||||
);
|
||||
|
||||
-- Indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_checkins_user_date ON checkins(user_id, checked_in_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_milestones_user ON milestones(user_id);
|
||||
|
||||
-- Migrations tracking table
|
||||
CREATE TABLE IF NOT EXISTS schema_migrations (
|
||||
version INTEGER PRIMARY KEY,
|
||||
applied_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
Reference in New Issue
Block a user