feat: ship self-hosted KOC LOOP workflows
This commit is contained in:
195
mysql/0001_init.sql
Normal file
195
mysql/0001_init.sql
Normal file
@@ -0,0 +1,195 @@
|
||||
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;
|
||||
2
mysql/0002_resource_import.sql
Normal file
2
mysql/0002_resource_import.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE accounts
|
||||
ADD COLUMN cooperation_source VARCHAR(500) NOT NULL DEFAULT '' AFTER avg_views;
|
||||
8
mysql/0003_screenshot_tasks.sql
Normal file
8
mysql/0003_screenshot_tasks.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
ALTER TABLE tasks
|
||||
ADD COLUMN task_type VARCHAR(32) NOT NULL DEFAULT 'content_publish' AFTER status;
|
||||
-- statement-breakpoint
|
||||
ALTER TABLE distributions
|
||||
ADD COLUMN result_screenshot_key VARCHAR(512) NULL AFTER publish_screenshot_key;
|
||||
-- statement-breakpoint
|
||||
ALTER TABLE distributions
|
||||
ADD COLUMN result_submitted_at DATETIME(3) NULL AFTER result_screenshot_key;
|
||||
2
mysql/0004_multi_result_screenshots.sql
Normal file
2
mysql/0004_multi_result_screenshots.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE distributions
|
||||
MODIFY COLUMN result_screenshot_key TEXT NULL;
|
||||
Reference in New Issue
Block a user