- server: Go 单二进制骨架,embed 内嵌前端,配置/迁移/HTTP 路由 - store: system.db + event.db 两套迁移,业务表 + 种子数据 - domain: 积分引擎(并列三口径/计分通道/流水/排名/破纪录)+ 68 个测试 - web: Vite + Vue 三入口骨架 + shared 层(类型/API/WebSocket 客户端) - console: Electron 宿主骨架(选屏/防熄屏/进程守护/托盘)
34 lines
1.5 KiB
SQL
34 lines
1.5 KiB
SQL
CREATE TABLE IF NOT EXISTS records (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
event_id INTEGER NOT NULL REFERENCES events(id),
|
|
level TEXT NOT NULL CHECK (level IN ('meet', 'city', 'province', 'national')),
|
|
result_value REAL,
|
|
result_text TEXT,
|
|
holder_name TEXT,
|
|
holder_team_id INTEGER REFERENCES teams(id),
|
|
achieved_at TEXT,
|
|
is_current INTEGER NOT NULL DEFAULT 1 CHECK (is_current IN (0, 1)),
|
|
source TEXT NOT NULL DEFAULT 'history' CHECK (source IN ('history', 'current')),
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_records_event_level ON records(event_id, level, is_current);
|
|
|
|
CREATE TABLE IF NOT EXISTS record_breaks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
event_id INTEGER NOT NULL REFERENCES events(id),
|
|
entry_id INTEGER NOT NULL REFERENCES entries(id),
|
|
level TEXT NOT NULL CHECK (level IN ('meet', 'city', 'province', 'national')),
|
|
result_value REAL,
|
|
result_text TEXT,
|
|
bonus_points REAL NOT NULL DEFAULT 0,
|
|
state TEXT NOT NULL DEFAULT 'pending'
|
|
CHECK (state IN ('pending', 'approved', 'rejected')),
|
|
-- approved_by 指向系统库 users,跨库不能建外键。
|
|
approved_by INTEGER,
|
|
approved_at TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_record_breaks_event_id ON record_breaks(event_id, state);
|