feat: 初始化慧遇书院官网一期
This commit is contained in:
52
server/database/migrations/001_initial.sql
Normal file
52
server/database/migrations/001_initial.sql
Normal file
@@ -0,0 +1,52 @@
|
||||
CREATE TABLE IF NOT EXISTS admin_users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT NOT NULL UNIQUE,
|
||||
password_hash TEXT NOT NULL,
|
||||
display_name TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'disabled')),
|
||||
failed_login_count INTEGER NOT NULL DEFAULT 0,
|
||||
locked_until TEXT,
|
||||
last_login_at TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS site_documents (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
document_key TEXT NOT NULL UNIQUE,
|
||||
draft_json TEXT NOT NULL,
|
||||
published_json TEXT NOT NULL,
|
||||
updated_by INTEGER,
|
||||
updated_at TEXT NOT NULL,
|
||||
published_at TEXT,
|
||||
FOREIGN KEY (updated_by) REFERENCES admin_users(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS revisions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
entity_type TEXT NOT NULL,
|
||||
entity_key TEXT NOT NULL,
|
||||
version INTEGER NOT NULL,
|
||||
snapshot_json TEXT NOT NULL,
|
||||
operator_id INTEGER,
|
||||
action TEXT NOT NULL,
|
||||
comment TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
FOREIGN KEY (operator_id) REFERENCES admin_users(id),
|
||||
UNIQUE(entity_type, entity_key, version)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
operator_id INTEGER,
|
||||
action TEXT NOT NULL,
|
||||
entity_type TEXT NOT NULL,
|
||||
entity_key TEXT,
|
||||
ip_address TEXT,
|
||||
metadata_json TEXT NOT NULL DEFAULT '{}',
|
||||
created_at TEXT NOT NULL,
|
||||
FOREIGN KEY (operator_id) REFERENCES admin_users(id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_revisions_entity ON revisions(entity_type, entity_key, version DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_audit_created_at ON audit_logs(created_at DESC);
|
||||
25
server/database/migrations/002_media_assets.sql
Normal file
25
server/database/migrations/002_media_assets.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
CREATE TABLE IF NOT EXISTS media_assets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
asset_key TEXT NOT NULL UNIQUE,
|
||||
original_name TEXT NOT NULL,
|
||||
mime_type TEXT NOT NULL,
|
||||
extension TEXT NOT NULL,
|
||||
bytes INTEGER NOT NULL,
|
||||
width INTEGER NOT NULL,
|
||||
height INTEGER NOT NULL,
|
||||
original_path TEXT NOT NULL,
|
||||
derived_path TEXT NOT NULL,
|
||||
thumbnail_path TEXT NOT NULL,
|
||||
alt_text TEXT NOT NULL DEFAULT '',
|
||||
source_text TEXT NOT NULL DEFAULT '',
|
||||
copyright_text TEXT NOT NULL DEFAULT '',
|
||||
authorization_status TEXT NOT NULL DEFAULT 'pending' CHECK (authorization_status IN ('pending', 'authorized', 'restricted')),
|
||||
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'trash', 'deleted')),
|
||||
created_by INTEGER,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
deleted_at TEXT,
|
||||
FOREIGN KEY (created_by) REFERENCES admin_users(id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_media_assets_status_created ON media_assets(status, created_at DESC);
|
||||
Reference in New Issue
Block a user