publisher/ddl/mysql.sql
yumoqing 6cbc0475af feat: multi-platform content publisher module for Sage
4 tables: publisher_platform/content/task/log
10 platforms: weibo/douyin/bilibili/kuaishou/wechat/xiaohongshu/toutiao/youtube/twitter
Sage-compliant: DSPY no-import delegation, init.py→ServerEnv, scripts/load_path.py
Content types: article/video/audio/image with per-platform format adapters
2026-08-04 08:16:53 +08:00

86 lines
3.5 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.

-- ============================================
-- 内容发布模块 (Publisher) — 4 tables
-- ============================================
-- ./publisher_platform (发布平台配置)
drop table if exists publisher_platform;
CREATE TABLE publisher_platform
(
`id` VARCHAR(32) comment 'id',
`name` VARCHAR(200) comment '平台名称',
`platform_code` VARCHAR(50) comment '平台代码: douyin/kuaishou/bilibili/weibo/wechat/xiaohongshu/toutiao/youtube/twitter',
`api_endpoint` VARCHAR(500) comment 'API 端点',
`app_key` VARCHAR(500) comment 'App Key',
`app_secret` VARCHAR(500) comment 'App Secret(加密)',
`access_token` VARCHAR(2000) comment 'Access Token',
`refresh_token` VARCHAR(500) comment 'Refresh Token',
`token_expires` VARCHAR(50) comment 'Token 过期时间',
`extra_config` TEXT comment '额外配置 JSON (内容格式限制/审核规则等)',
`enabled` VARCHAR(1) DEFAULT '1' comment '是否启用',
`created_at` VARCHAR(50) comment '创建时间'
,primary key(id)
)
engine=innodb default charset=utf8 comment '发布平台配置'
;
-- ./publisher_content (待发布内容)
drop table if exists publisher_content;
CREATE TABLE publisher_content
(
`id` VARCHAR(32) comment 'id',
`title` VARCHAR(500) comment '标题',
`content_type` VARCHAR(20) comment '类型: article/video/audio/image',
`body` TEXT comment '正文/描述',
`media_urls` TEXT comment '媒体文件URL列表 JSON',
`cover_url` VARCHAR(2000) comment '封面图URL',
`tags` VARCHAR(500) comment '标签',
`category` VARCHAR(100) comment '分类',
`status` VARCHAR(20) DEFAULT 'draft' comment '状态: draft/ready/publishing/published/failed',
`created_at` VARCHAR(50) comment '创建时间',
`updated_at` VARCHAR(50) comment '更新时间'
,primary key(id)
)
engine=innodb default charset=utf8 comment '发布内容'
;
-- ./publisher_task (发布任务 — 内容 × 平台的关联)
drop table if exists publisher_task;
CREATE TABLE publisher_task
(
`id` VARCHAR(32) comment 'id',
`content_id` VARCHAR(32) comment '内容ID',
`platform_id` VARCHAR(32) comment '平台ID',
`schedule_at` VARCHAR(50) comment '定时发布时间',
`status` VARCHAR(20) DEFAULT 'pending' comment '状态: pending/running/success/failed/cancelled',
`external_id` VARCHAR(500) comment '平台返回的内容ID',
`external_url` VARCHAR(2000) comment '平台返回的链接',
`retry_count` INT DEFAULT 0 comment '重试次数',
`created_at` VARCHAR(50) comment '创建时间',
`executed_at` VARCHAR(50) comment '执行时间'
,primary key(id)
)
engine=innodb default charset=utf8 comment '发布任务'
;
CREATE INDEX publisher_task_content_idx ON publisher_task(content_id);
CREATE INDEX publisher_task_platform_idx ON publisher_task(platform_id);
CREATE INDEX publisher_task_status_idx ON publisher_task(status);
-- ./publisher_log (发布执行日志)
drop table if exists publisher_log;
CREATE TABLE publisher_log
(
`id` VARCHAR(32) comment 'id',
`task_id` VARCHAR(32) comment '任务ID',
`action` VARCHAR(50) comment '操作: publish/update/delete',
`status` VARCHAR(20) comment '状态: success/failed',
`duration_ms` INT DEFAULT 0 comment '耗时(毫秒)',
`error_code` VARCHAR(100) comment '错误码',
`error_detail` TEXT comment '错误详情',
`platform_response` TEXT comment '平台原始响应 JSON',
`executed_at` VARCHAR(50) comment '执行时间'
,primary key(id)
)
engine=innodb default charset=utf8 comment '发布日志'
;
CREATE INDEX publisher_log_task_idx ON publisher_log(task_id);