mirror of
https://github.com/DocNR/POWR.git
synced 2025-04-19 19:01:18 +00:00
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { SQLiteDatabase } from 'expo-sqlite';
|
|
|
|
export const SCHEMA_VERSION = 1;
|
|
|
|
class Schema {
|
|
async createTables(db: SQLiteDatabase): Promise<void> {
|
|
try {
|
|
// Version tracking
|
|
await db.execAsync(`
|
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
version INTEGER PRIMARY KEY,
|
|
updated_at INTEGER NOT NULL
|
|
);
|
|
`);
|
|
|
|
// Exercise Definitions
|
|
await db.execAsync(`
|
|
CREATE TABLE IF NOT EXISTS exercises (
|
|
id TEXT PRIMARY KEY,
|
|
title TEXT NOT NULL,
|
|
type TEXT NOT NULL,
|
|
category TEXT NOT NULL,
|
|
equipment TEXT,
|
|
description TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL
|
|
);
|
|
`);
|
|
|
|
// Exercise Tags
|
|
await db.execAsync(`
|
|
CREATE TABLE IF NOT EXISTS exercise_tags (
|
|
exercise_id TEXT NOT NULL,
|
|
tag TEXT NOT NULL,
|
|
FOREIGN KEY(exercise_id) REFERENCES exercises(id) ON DELETE CASCADE,
|
|
UNIQUE(exercise_id, tag)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_exercise_tags ON exercise_tags(tag);
|
|
`);
|
|
|
|
// Set initial schema version if not exists
|
|
const version = await db.getFirstAsync<{ version: number }>(
|
|
'SELECT version FROM schema_version ORDER BY version DESC LIMIT 1'
|
|
);
|
|
|
|
if (!version) {
|
|
await db.runAsync(
|
|
'INSERT INTO schema_version (version, updated_at) VALUES (?, ?)',
|
|
[SCHEMA_VERSION, Date.now()]
|
|
);
|
|
}
|
|
} catch (error) {
|
|
console.error('[Schema] Error creating tables:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
export const schema = new Schema(); |