Files
EveryPublish/server/db/migrations/0001_init.sql
T

209 lines
7.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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;