50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
const Database = require('better-sqlite3');
|
|
const path = require('path');
|
|
|
|
const dbPath = path.join(__dirname, '../data/fitai.db');
|
|
const db = new Database(dbPath);
|
|
|
|
console.log('Creating fitness_goals table...');
|
|
|
|
try {
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS fitness_goals (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL,
|
|
fitness_profile_id TEXT,
|
|
goal_type TEXT NOT NULL CHECK(goal_type IN ('weight_target', 'strength_milestone', 'endurance_target', 'flexibility_goal', 'habit_building', 'custom')),
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
target_value REAL,
|
|
current_value REAL,
|
|
unit TEXT,
|
|
start_date INTEGER NOT NULL,
|
|
target_date INTEGER,
|
|
completed_date INTEGER,
|
|
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'completed', 'abandoned', 'paused')),
|
|
progress REAL DEFAULT 0,
|
|
priority TEXT DEFAULT 'medium' CHECK(priority IN ('low', 'medium', 'high')),
|
|
notes TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (fitness_profile_id) REFERENCES fitness_profiles(userId) ON DELETE CASCADE
|
|
)
|
|
`);
|
|
|
|
// Create indexes for better query performance
|
|
db.exec(`
|
|
CREATE INDEX IF NOT EXISTS idx_fitness_goals_user_id ON fitness_goals(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_fitness_goals_status ON fitness_goals(status);
|
|
CREATE INDEX IF NOT EXISTS idx_fitness_goals_profile_id ON fitness_goals(fitness_profile_id);
|
|
`);
|
|
|
|
console.log('✅ fitness_goals table created successfully');
|
|
console.log('✅ Indexes created successfully');
|
|
} catch (error) {
|
|
console.error('❌ Migration failed:', error);
|
|
process.exit(1);
|
|
} finally {
|
|
db.close();
|
|
}
|