停止持久化 provider 原始响应、兼容响应快照、attempt/event/outbox 重复 JSON,并由标准任务结果动态生成 Kling/Keling/Volces 兼容响应。 增加事件去重与预算、极简 callback 投递、7/30 天分批清理、安全删除条件、并发迁移索引及可实际恢复的任务域排除备份。历史清理默认关闭,待兼容协议和异步恢复在线验证后单独启用。 验证:Go 全量测试与 go vet、PostgreSQL 18 集成与实际备份恢复、迁移安全测试、bash -n、ShellCheck、Compose 配置和人工发布脚本测试均通过。
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package store
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
)
|
|
|
|
type CompatibilitySubmission struct {
|
|
TargetProtocol string
|
|
PublicID string
|
|
SourceProtocol string
|
|
HTTPStatus int
|
|
Headers map[string]any
|
|
Body map[string]any
|
|
}
|
|
|
|
func (s *Store) SetTaskCompatibilitySubmission(ctx context.Context, taskID string, submission CompatibilitySubmission) error {
|
|
_, err := s.pool.Exec(ctx, `
|
|
UPDATE gateway_tasks
|
|
SET compatibility_protocol = COALESCE(NULLIF($2, ''), compatibility_protocol),
|
|
compatibility_public_id = NULL,
|
|
compatibility_source_protocol = COALESCE(NULLIF($3, ''), compatibility_source_protocol),
|
|
compatibility_submit_http_status = NULL,
|
|
compatibility_submit_headers = '{}'::jsonb,
|
|
compatibility_submit_body = '{}'::jsonb,
|
|
updated_at = now()
|
|
WHERE id = $1::uuid`,
|
|
taskID,
|
|
strings.TrimSpace(submission.TargetProtocol),
|
|
strings.TrimSpace(submission.SourceProtocol),
|
|
)
|
|
return err
|
|
}
|
|
|
|
func (s *Store) GetCompatibilityTask(ctx context.Context, protocol string, publicID string) (GatewayTask, error) {
|
|
task, err := scanGatewayTask(s.pool.QueryRow(ctx, `
|
|
SELECT `+gatewayTaskColumns+`
|
|
FROM gateway_tasks
|
|
WHERE compatibility_protocol = $1
|
|
AND (
|
|
id::text = $2
|
|
OR remote_task_id = $2
|
|
OR compatibility_public_id = $2
|
|
)
|
|
LIMIT 1`, strings.TrimSpace(protocol), strings.TrimSpace(publicID)))
|
|
if err != nil {
|
|
return GatewayTask{}, err
|
|
}
|
|
attempts, err := s.ListTaskAttempts(ctx, task.ID)
|
|
if err != nil {
|
|
return GatewayTask{}, err
|
|
}
|
|
task.Attempts = attempts
|
|
return task, nil
|
|
}
|