Files
WeightTracker/migrations/001_initial_schema.sql
Peter Stockings ccdb3d8dc7 Initial commit
2026-02-22 22:53:22 +11:00

68 lines
2.0 KiB
SQL

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