82 lines
2.6 KiB
SQL
82 lines
2.6 KiB
SQL
CREATE TABLE IF NOT EXISTS work_groups (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
class TEXT NOT NULL,
|
|
name TEXT NOT NULL,
|
|
volunteer_no TEXT,
|
|
group_id INTEGER,
|
|
FOREIGN KEY (group_id) REFERENCES work_groups(id) ON DELETE SET NULL,
|
|
UNIQUE(class, name)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_groups (
|
|
user_id INTEGER NOT NULL,
|
|
group_id INTEGER NOT NULL,
|
|
PRIMARY KEY (user_id, group_id),
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (group_id) REFERENCES work_groups(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS activities (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL,
|
|
content TEXT,
|
|
start_time TEXT NOT NULL,
|
|
end_time TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS activity_groups (
|
|
activity_id INTEGER NOT NULL,
|
|
group_id INTEGER NOT NULL,
|
|
PRIMARY KEY (activity_id, group_id),
|
|
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (group_id) REFERENCES work_groups(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS hours (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
activity_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
hours REAL NOT NULL DEFAULT 0,
|
|
exported_hours REAL NOT NULL DEFAULT 0,
|
|
remark TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours')),
|
|
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS admins (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT NOT NULL UNIQUE,
|
|
password_hash TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS four_hour_exports (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
status TEXT NOT NULL DEFAULT 'active',
|
|
admin_username TEXT,
|
|
eligible_count INTEGER NOT NULL DEFAULT 0,
|
|
eligible_hours_total REAL NOT NULL DEFAULT 0,
|
|
items_updated INTEGER NOT NULL DEFAULT 0,
|
|
plan_json TEXT,
|
|
note TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours')),
|
|
voided_at TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS four_hour_export_items (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
export_id INTEGER NOT NULL,
|
|
hour_id INTEGER NOT NULL,
|
|
delta REAL NOT NULL,
|
|
FOREIGN KEY (export_id) REFERENCES four_hour_exports(id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_fhe_items_export ON four_hour_export_items(export_id);
|
|
CREATE INDEX IF NOT EXISTS idx_fhe_items_hour ON four_hour_export_items(hour_id);
|