209 lines
7.8 KiB
SQL
209 lines
7.8 KiB
SQL
-- EveryPublish 0001_init:初始 Schema(MySQL 8.x, utf8mb4)
|
||
-- 开发期由 GORM AutoMigrate 建表;生产执行本文件(golang-migrate)。
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
email VARCHAR(191) NOT NULL,
|
||
password_hash VARCHAR(255) NOT NULL,
|
||
nickname VARCHAR(64) NOT NULL DEFAULT '',
|
||
role VARCHAR(16) NOT NULL DEFAULT 'user',
|
||
totp_secret VARCHAR(64) NOT NULL DEFAULT '',
|
||
totp_enabled TINYINT(1) NOT NULL DEFAULT 0,
|
||
status VARCHAR(16) NOT NULL DEFAULT 'active',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_users_email (email)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS workspaces (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
name VARCHAR(128) NOT NULL DEFAULT '',
|
||
owner_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
plan VARCHAR(32) NOT NULL DEFAULT 'free',
|
||
status VARCHAR(16) NOT NULL DEFAULT 'active',
|
||
PRIMARY KEY (id),
|
||
KEY idx_workspaces_owner_id (owner_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS members (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
user_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
role VARCHAR(16) NOT NULL DEFAULT 'viewer',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_ws_user (workspace_id, user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS accounts (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
platform VARCHAR(32) NOT NULL DEFAULT '',
|
||
account_name VARCHAR(128) NOT NULL DEFAULT '',
|
||
avatar_url VARCHAR(512) NOT NULL DEFAULT '',
|
||
status VARCHAR(16) NOT NULL DEFAULT 'unbound',
|
||
health INT NOT NULL DEFAULT 100,
|
||
agent_device_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
ip_profile VARCHAR(191) NOT NULL DEFAULT '',
|
||
last_active_at DATETIME(3) NULL,
|
||
last_error VARCHAR(512) NOT NULL DEFAULT '',
|
||
PRIMARY KEY (id),
|
||
KEY idx_accounts_workspace_id (workspace_id),
|
||
KEY idx_accounts_platform (platform),
|
||
KEY idx_accounts_agent_device_id (agent_device_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS materials (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
name VARCHAR(255) NOT NULL DEFAULT '',
|
||
kind VARCHAR(16) NOT NULL DEFAULT 'video',
|
||
size BIGINT NOT NULL DEFAULT 0,
|
||
sha256 VARCHAR(64) NOT NULL DEFAULT '',
|
||
mime VARCHAR(128) NOT NULL DEFAULT '',
|
||
storage_key VARCHAR(512) NOT NULL DEFAULT '',
|
||
`group` VARCHAR(64) NOT NULL DEFAULT '',
|
||
tags TEXT NULL,
|
||
status VARCHAR(16) NOT NULL DEFAULT 'ready',
|
||
created_by BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
PRIMARY KEY (id),
|
||
KEY idx_materials_workspace_id (workspace_id),
|
||
KEY idx_materials_sha256 (sha256)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS tasks (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
title VARCHAR(255) NOT NULL DEFAULT '',
|
||
content TEXT NULL,
|
||
tags TEXT NULL,
|
||
account_ids TEXT NULL,
|
||
material_ids TEXT NULL,
|
||
schedule_at DATETIME(3) NULL,
|
||
status VARCHAR(32) NOT NULL DEFAULT 'draft',
|
||
priority INT NOT NULL DEFAULT 5,
|
||
retry_count INT NOT NULL DEFAULT 0,
|
||
max_retry INT NOT NULL DEFAULT 3,
|
||
error_message VARCHAR(1024) NOT NULL DEFAULT '',
|
||
published_at DATETIME(3) NULL,
|
||
published_urls TEXT NULL,
|
||
receipts TEXT NULL,
|
||
created_by BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
reviewed_by BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
review_note VARCHAR(512) NOT NULL DEFAULT '',
|
||
PRIMARY KEY (id),
|
||
KEY idx_tasks_workspace_id (workspace_id),
|
||
KEY idx_tasks_status (status),
|
||
KEY idx_tasks_schedule_at (schedule_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS agent_devices (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
name VARCHAR(128) NOT NULL DEFAULT '',
|
||
os VARCHAR(32) NOT NULL DEFAULT '',
|
||
version VARCHAR(32) NOT NULL DEFAULT '',
|
||
public_key TEXT NULL,
|
||
status VARCHAR(16) NOT NULL DEFAULT 'offline',
|
||
ip VARCHAR(64) NOT NULL DEFAULT '',
|
||
revoked TINYINT(1) NOT NULL DEFAULT 0,
|
||
last_seen_at DATETIME(3) NULL,
|
||
paired_at DATETIME(3) NULL,
|
||
PRIMARY KEY (id),
|
||
KEY idx_agent_devices_workspace_id (workspace_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS challenges (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
account_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
device_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
platform VARCHAR(32) NOT NULL DEFAULT '',
|
||
kind VARCHAR(16) NOT NULL DEFAULT 'pending',
|
||
status VARCHAR(16) NOT NULL DEFAULT 'active',
|
||
qr_token VARCHAR(512) NOT NULL DEFAULT '',
|
||
qr_url VARCHAR(1024) NOT NULL DEFAULT '',
|
||
prompt VARCHAR(512) NOT NULL DEFAULT '',
|
||
payload TEXT NULL,
|
||
expires_at DATETIME(3) NULL,
|
||
solved_at DATETIME(3) NULL,
|
||
PRIMARY KEY (id),
|
||
KEY idx_challenges_workspace_id (workspace_id),
|
||
KEY idx_challenges_account_id (account_id),
|
||
KEY idx_challenges_device_id (device_id),
|
||
KEY idx_challenges_expires_at (expires_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
user_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
action VARCHAR(64) NOT NULL DEFAULT '',
|
||
resource VARCHAR(128) NOT NULL DEFAULT '',
|
||
detail TEXT NULL,
|
||
ip VARCHAR(64) NOT NULL DEFAULT '',
|
||
PRIMARY KEY (id),
|
||
KEY idx_audit_logs_workspace_id (workspace_id),
|
||
KEY idx_audit_logs_user_id (user_id),
|
||
KEY idx_audit_logs_action (action)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS notifications (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
user_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
kind VARCHAR(32) NOT NULL DEFAULT 'system',
|
||
title VARCHAR(255) NOT NULL DEFAULT '',
|
||
content TEXT NULL,
|
||
`read` TINYINT(1) NOT NULL DEFAULT 0,
|
||
PRIMARY KEY (id),
|
||
KEY idx_notifications_workspace_id (workspace_id),
|
||
KEY idx_notifications_user_id (user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS pairing_codes (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
workspace_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
code VARCHAR(12) NOT NULL DEFAULT '',
|
||
expires_at DATETIME(3) NULL,
|
||
used TINYINT(1) NOT NULL DEFAULT 0,
|
||
device_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_pairing_codes_code (code),
|
||
KEY idx_pairing_codes_workspace_id (workspace_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS transfer_tokens (
|
||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
created_at DATETIME(3) NULL,
|
||
updated_at DATETIME(3) NULL,
|
||
material_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
token VARCHAR(191) NOT NULL DEFAULT '',
|
||
expires_at DATETIME(3) NULL,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_transfer_tokens_token (token),
|
||
KEY idx_transfer_tokens_material_id (material_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|