feat(schedule-tasks): support auto-publish via media accounts
Replace the legacy target_platform string on schedule tasks with a workspace-aware auto-publish payload (auto_publish + publish_account_ids JSONB + cover_asset_url + cover_image_asset_id) and migrate the schema, sqlc queries, generated models, domain struct, ScheduleTaskService DTOs, and dispatch worker to round-trip the new fields. PromptRuleGeneration gains a WithPublishJobService hook so executeGeneration can enqueue an auto-publish job once the article is ready, and worker-generate wires the publish-job service in. On the admin-web side, extract PublishArticleModal's account-card builders into a shared publish-account-cards module, rebuild GenerateTaskDrawer's schedule mode around account selection plus a CoverPickerModal, and surface the new "auto publish" column on ScheduleTaskTab. Shared types and i18n strings cover the new fields. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
-- name: ListScheduleTasks :many
|
||||
SELECT st.id, st.tenant_id, st.prompt_rule_id, st.brand_id, st.name,
|
||||
st.cron_expr, st.target_platform, st.start_at, st.end_at,
|
||||
SELECT st.id, st.tenant_id, st.workspace_id, st.prompt_rule_id, st.brand_id, st.name,
|
||||
st.cron_expr, st.auto_publish, st.publish_account_ids, st.cover_asset_url, st.cover_image_asset_id,
|
||||
st.start_at, st.end_at,
|
||||
st.next_run_at, st.status, st.created_at, st.updated_at,
|
||||
pr.name AS prompt_rule_name,
|
||||
b.name AS brand_name
|
||||
@@ -23,8 +24,9 @@ WHERE tenant_id = sqlc.arg(tenant_id)
|
||||
AND (sqlc.narg(prompt_rule_id)::bigint IS NULL OR prompt_rule_id = sqlc.narg(prompt_rule_id));
|
||||
|
||||
-- name: GetScheduleTaskByID :one
|
||||
SELECT st.id, st.tenant_id, st.prompt_rule_id, st.brand_id, st.name,
|
||||
st.cron_expr, st.target_platform, st.start_at, st.end_at,
|
||||
SELECT st.id, st.tenant_id, st.workspace_id, st.prompt_rule_id, st.brand_id, st.name,
|
||||
st.cron_expr, st.auto_publish, st.publish_account_ids, st.cover_asset_url, st.cover_image_asset_id,
|
||||
st.start_at, st.end_at,
|
||||
st.next_run_at, st.status, st.created_at, st.updated_at,
|
||||
pr.name AS prompt_rule_name,
|
||||
b.name AS brand_name
|
||||
@@ -34,10 +36,12 @@ LEFT JOIN brands b ON b.id = st.brand_id
|
||||
WHERE st.id = sqlc.arg(id) AND st.tenant_id = sqlc.arg(tenant_id) AND st.deleted_at IS NULL;
|
||||
|
||||
-- name: CreateScheduleTask :one
|
||||
INSERT INTO schedule_tasks (tenant_id, prompt_rule_id, brand_id, name, cron_expr,
|
||||
target_platform, start_at, end_at, next_run_at)
|
||||
VALUES (sqlc.arg(tenant_id), sqlc.arg(prompt_rule_id), sqlc.narg(brand_id), sqlc.arg(name),
|
||||
sqlc.arg(cron_expr), sqlc.narg(target_platform), sqlc.narg(start_at), sqlc.narg(end_at),
|
||||
INSERT INTO schedule_tasks (tenant_id, workspace_id, prompt_rule_id, brand_id, name, cron_expr,
|
||||
auto_publish, publish_account_ids, cover_asset_url, cover_image_asset_id,
|
||||
start_at, end_at, next_run_at)
|
||||
VALUES (sqlc.arg(tenant_id), sqlc.narg(workspace_id), sqlc.arg(prompt_rule_id), sqlc.narg(brand_id), sqlc.arg(name),
|
||||
sqlc.arg(cron_expr), sqlc.arg(auto_publish), sqlc.arg(publish_account_ids), sqlc.narg(cover_asset_url),
|
||||
sqlc.narg(cover_image_asset_id), sqlc.narg(start_at), sqlc.narg(end_at),
|
||||
sqlc.narg(next_run_at))
|
||||
RETURNING id, created_at;
|
||||
|
||||
@@ -45,7 +49,11 @@ RETURNING id, created_at;
|
||||
UPDATE schedule_tasks
|
||||
SET prompt_rule_id = sqlc.arg(prompt_rule_id), brand_id = sqlc.narg(brand_id),
|
||||
name = sqlc.arg(name), cron_expr = sqlc.arg(cron_expr),
|
||||
target_platform = sqlc.narg(target_platform),
|
||||
workspace_id = sqlc.narg(workspace_id),
|
||||
auto_publish = sqlc.arg(auto_publish),
|
||||
publish_account_ids = sqlc.arg(publish_account_ids),
|
||||
cover_asset_url = sqlc.narg(cover_asset_url),
|
||||
cover_image_asset_id = sqlc.narg(cover_image_asset_id),
|
||||
start_at = sqlc.narg(start_at), end_at = sqlc.narg(end_at),
|
||||
next_run_at = sqlc.narg(next_run_at), updated_at = NOW()
|
||||
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id) AND deleted_at IS NULL;
|
||||
|
||||
Reference in New Issue
Block a user