Profile IDs are UUID type in the profiles table, not VARCHAR. This was causing foreign key constraint error on migration. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
32 lines
1.4 KiB
SQL
32 lines
1.4 KiB
SQL
-- Migration 009: Sleep Log Table
|
|
-- v9d Phase 2b: Sleep Module Core
|
|
-- Date: 2026-03-22
|
|
|
|
CREATE TABLE IF NOT EXISTS sleep_log (
|
|
id SERIAL PRIMARY KEY,
|
|
profile_id UUID NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
date DATE NOT NULL,
|
|
bedtime TIME,
|
|
wake_time TIME,
|
|
duration_minutes INTEGER NOT NULL CHECK (duration_minutes > 0),
|
|
quality INTEGER CHECK (quality >= 1 AND quality <= 5),
|
|
wake_count INTEGER CHECK (wake_count >= 0),
|
|
deep_minutes INTEGER CHECK (deep_minutes >= 0),
|
|
rem_minutes INTEGER CHECK (rem_minutes >= 0),
|
|
light_minutes INTEGER CHECK (light_minutes >= 0),
|
|
awake_minutes INTEGER CHECK (awake_minutes >= 0),
|
|
sleep_segments JSONB,
|
|
note TEXT,
|
|
source VARCHAR(20) DEFAULT 'manual' CHECK (source IN ('manual', 'apple_health', 'garmin')),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT unique_sleep_per_day UNIQUE(profile_id, date)
|
|
);
|
|
|
|
CREATE INDEX idx_sleep_profile_date ON sleep_log(profile_id, date DESC);
|
|
|
|
-- Comments for documentation
|
|
COMMENT ON TABLE sleep_log IS 'v9d Phase 2b: Daily sleep tracking with phase data';
|
|
COMMENT ON COLUMN sleep_log.date IS 'Date of the night (wake date, not bedtime date)';
|
|
COMMENT ON COLUMN sleep_log.sleep_segments IS 'Raw phase segments: [{"phase": "deep", "start": "23:44", "duration_min": 42}, ...]';
|