feat: complete remaining Go backend modules

This commit is contained in:
2026-08-14 00:02:43 +08:00
parent cea2751dc5
commit aef5a97165
145 changed files with 18376 additions and 199 deletions

View File

@@ -29,6 +29,7 @@ create table if not exists generation_jobs (
input_urls text[] not null default '{}',
output_asset_ids text[] not null default '{}',
provider_task_id text,
provider_dispatch_started_at timestamptz,
request_payload jsonb not null default '{}'::jsonb,
response_payload jsonb,
error jsonb,
@@ -43,6 +44,8 @@ create table if not exists generation_jobs (
locked_by text,
started_at timestamptz,
completed_at timestamptz,
dispatch_ready_at timestamptz,
finalized_at timestamptz,
webhook_url text,
webhook_attempts integer not null default 0,
webhook_last_status jsonb,
@@ -66,6 +69,18 @@ alter table generation_jobs add column if not exists webhook_url text;
alter table generation_jobs add column if not exists webhook_attempts integer not null default 0;
alter table generation_jobs add column if not exists webhook_last_status jsonb;
alter table generation_jobs add column if not exists usage_context jsonb;
alter table generation_jobs add column if not exists provider_dispatch_started_at timestamptz;
alter table generation_jobs add column if not exists dispatch_ready_at timestamptz;
alter table generation_jobs add column if not exists finalized_at timestamptz;
update generation_jobs
set dispatch_ready_at = coalesce(dispatch_ready_at, created_at, now())
where dispatch_ready_at is null;
update generation_jobs
set finalized_at = coalesce(finalized_at, completed_at, updated_at, now())
where finalized_at is null
and status in ('succeeded', 'failed', 'expired', 'cancelled');
create table if not exists usage_events (
id text primary key,
@@ -147,6 +162,7 @@ create index if not exists assets_owner_created_idx on assets(owner_id, created_
create index if not exists generation_jobs_owner_created_idx on generation_jobs(owner_id, created_at desc);
create index if not exists generation_jobs_status_idx on generation_jobs(status);
create index if not exists generation_jobs_claim_idx on generation_jobs(status, scheduled_at, locked_at, priority desc);
create index if not exists generation_jobs_finalize_claim_idx on generation_jobs(finalized_at, scheduled_at, locked_at, priority desc);
create index if not exists generation_jobs_external_client_idx on generation_jobs(owner_id, external_client_id, created_at desc);
create unique index if not exists generation_jobs_idempotency_idx
on generation_jobs(owner_id, external_client_id, idempotency_key)
@@ -187,7 +203,9 @@ begin
with candidates as (
select id
from generation_jobs
where status in ('queued', 'running')
where dispatch_ready_at is not null
and finalized_at is null
and status in ('queued', 'running', 'succeeded', 'failed', 'expired', 'cancelled')
and coalesce(scheduled_at, created_at) <= v_now
and (
locked_at is null