server: Go 服务器(REST+WSS 网关+JWT+Argon2+配对+素材直链+任务状态机);修复并发下线 send-on-closed-channel、下发查询 SQL 优先级、配对码原子占用、上传体积上限、JWT 默认密钥告警
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user