196 lines
7.9 KiB
SQL
196 lines
7.9 KiB
SQL
CREATE TABLE IF NOT EXISTS partners (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
wecom_name VARCHAR(255) NOT NULL,
|
|
owner VARCHAR(255) NOT NULL DEFAULT '运营组',
|
|
claimed_total INT NOT NULL DEFAULT 0,
|
|
completed_total INT NOT NULL DEFAULT 0,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
brand VARCHAR(255) NOT NULL,
|
|
quantity INT NOT NULL,
|
|
claimed_quantity INT NOT NULL DEFAULT 0,
|
|
due_at VARCHAR(32) NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
|
source_url TEXT NOT NULL DEFAULT (''),
|
|
source_sheet_id VARCHAR(255) NOT NULL DEFAULT '',
|
|
source_sheet_name VARCHAR(255) NOT NULL DEFAULT '',
|
|
source_synced_at DATETIME(3) NULL,
|
|
share_token VARCHAR(128) NULL,
|
|
collection_start_date VARCHAR(32) NULL,
|
|
collection_days TEXT NOT NULL DEFAULT ('[]'),
|
|
collection_schedule_updated_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
UNIQUE KEY tasks_share_token_idx (share_token)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS contents (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
title TEXT NOT NULL,
|
|
body LONGTEXT NOT NULL DEFAULT (''),
|
|
image_assets LONGTEXT NOT NULL DEFAULT ('[]'),
|
|
status VARCHAR(32) NOT NULL DEFAULT 'available',
|
|
source VARCHAR(255) NOT NULL DEFAULT '飞书内容表',
|
|
source_row INT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
KEY contents_task_status_idx (task_id, status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS accounts (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
platform VARCHAR(32) NOT NULL DEFAULT '小红书',
|
|
platform_uid VARCHAR(255) NOT NULL,
|
|
public_account_id VARCHAR(255) NOT NULL DEFAULT '',
|
|
nickname VARCHAR(255) NOT NULL,
|
|
profile_url TEXT NOT NULL DEFAULT (''),
|
|
ip_location VARCHAR(255) NOT NULL DEFAULT '待识别',
|
|
followers INT NOT NULL DEFAULT 0,
|
|
post_count INT NOT NULL DEFAULT 0,
|
|
avg_views INT NOT NULL DEFAULT 0,
|
|
first_seen_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
last_seen_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
UNIQUE KEY accounts_platform_uid_idx (platform, platform_uid)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS claims (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
partner_id VARCHAR(64) NOT NULL,
|
|
claimant_name VARCHAR(255) NOT NULL,
|
|
claim_token VARCHAR(128) NOT NULL,
|
|
quantity INT NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
UNIQUE KEY claims_claim_token_idx (claim_token),
|
|
KEY claims_task_partner_created_idx (task_id, partner_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS delegation_bundles (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
claim_id VARCHAR(64) NOT NULL,
|
|
partner_id VARCHAR(64) NOT NULL,
|
|
label VARCHAR(255) NOT NULL,
|
|
share_token VARCHAR(128) NOT NULL,
|
|
quantity INT NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
revoked_at DATETIME(3) NULL,
|
|
UNIQUE KEY delegation_bundles_share_token_idx (share_token),
|
|
KEY delegation_bundles_claim_created_idx (claim_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS distributions (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
content_id VARCHAR(64) NOT NULL,
|
|
partner_id VARCHAR(64) NOT NULL,
|
|
claim_id VARCHAR(64) NULL,
|
|
delegation_bundle_id VARCHAR(64) NULL,
|
|
account_id VARCHAR(64) NULL,
|
|
publish_url TEXT NULL,
|
|
publish_time DATETIME(3) NULL,
|
|
publish_screenshot_key VARCHAR(512) NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'claimed',
|
|
claimed_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
screenshot_key VARCHAR(512) NULL,
|
|
ocr_status VARCHAR(32) NOT NULL DEFAULT 'none',
|
|
exposure INT NULL,
|
|
views INT NULL,
|
|
d2_likes INT NULL,
|
|
d2_comments INT NULL,
|
|
d2_collects INT NULL,
|
|
d5_likes INT NULL,
|
|
d5_comments INT NULL,
|
|
d5_collects INT NULL,
|
|
d7_likes INT NULL,
|
|
d7_comments INT NULL,
|
|
d7_collects INT NULL,
|
|
latest_likes INT NULL,
|
|
latest_comments INT NULL,
|
|
latest_collects INT NULL,
|
|
collection_status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
|
collection_status_description TEXT NULL,
|
|
collection_updated_at DATETIME(3) NULL,
|
|
last_collection_day INT NULL,
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
KEY distributions_task_status_idx (task_id, status),
|
|
KEY distributions_content_idx (content_id),
|
|
KEY distributions_account_idx (account_id),
|
|
KEY distributions_claim_idx (claim_id),
|
|
KEY distributions_delegation_idx (delegation_bundle_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS collection_runs (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
distribution_id VARCHAR(64) NOT NULL,
|
|
scheduled_date VARCHAR(32) NOT NULL,
|
|
schedule_day INT NULL,
|
|
scheduled_at DATETIME(3) NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
|
likes INT NULL,
|
|
comments INT NULL,
|
|
collects INT NULL,
|
|
status_description TEXT NULL,
|
|
started_at DATETIME(3) NULL,
|
|
completed_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
UNIQUE KEY collection_runs_distribution_date_idx (distribution_id, scheduled_date),
|
|
KEY collection_runs_task_date_idx (task_id, scheduled_date)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
username VARCHAR(255) NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
password_salt VARCHAR(255) NOT NULL,
|
|
password_iterations INT NOT NULL,
|
|
role VARCHAR(32) NOT NULL,
|
|
super_admin_guard TINYINT GENERATED ALWAYS AS (
|
|
CASE WHEN role = 'super_admin' THEN 1 ELSE NULL END
|
|
) STORED,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
UNIQUE KEY users_username_idx (username),
|
|
UNIQUE KEY users_single_super_admin_idx (super_admin_guard)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS auth_sessions (
|
|
token_hash VARCHAR(128) PRIMARY KEY,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
expires_at DATETIME(3) NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
KEY auth_sessions_user_id_idx (user_id),
|
|
KEY auth_sessions_expires_at_idx (expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS mcp_export_tokens (
|
|
token_hash VARCHAR(128) PRIMARY KEY,
|
|
kind VARCHAR(64) NOT NULL,
|
|
payload LONGTEXT NOT NULL,
|
|
expires_at DATETIME(3) NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
KEY mcp_export_tokens_expires_at_idx (expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
-- statement-breakpoint
|
|
CREATE TABLE IF NOT EXISTS background_jobs (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
type VARCHAR(64) NOT NULL,
|
|
payload LONGTEXT NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
|
attempts INT NOT NULL DEFAULT 0,
|
|
available_at DATETIME(3) NOT NULL,
|
|
locked_at DATETIME(3) NULL,
|
|
completed_at DATETIME(3) NULL,
|
|
last_error TEXT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
KEY background_jobs_pending_idx (status, available_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|