159_batch_image_foundation.sql 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. CREATE TABLE IF NOT EXISTS batch_image_jobs (
  2. id BIGSERIAL PRIMARY KEY,
  3. batch_id VARCHAR(64) NOT NULL UNIQUE,
  4. user_id BIGINT NOT NULL,
  5. api_key_id BIGINT,
  6. account_id BIGINT,
  7. provider VARCHAR(32) NOT NULL,
  8. model VARCHAR(128) NOT NULL,
  9. status VARCHAR(32) NOT NULL DEFAULT 'created',
  10. provider_job_name VARCHAR(512),
  11. gcs_input_uri VARCHAR(1024),
  12. gcs_output_uri VARCHAR(1024),
  13. item_count INTEGER NOT NULL,
  14. success_count INTEGER NOT NULL DEFAULT 0,
  15. fail_count INTEGER NOT NULL DEFAULT 0,
  16. cancelled_count INTEGER NOT NULL DEFAULT 0,
  17. estimated_cost DECIMAL(20,10) NOT NULL DEFAULT 0,
  18. hold_amount DECIMAL(20,10),
  19. actual_cost DECIMAL(20,10),
  20. currency VARCHAR(16) NOT NULL DEFAULT 'USD',
  21. hold_id VARCHAR(128),
  22. idempotency_key VARCHAR(255),
  23. request_hash VARCHAR(128),
  24. manifest_hash VARCHAR(128),
  25. retry_count INTEGER NOT NULL DEFAULT 0,
  26. version INTEGER NOT NULL DEFAULT 0,
  27. output_expires_at TIMESTAMPTZ,
  28. input_deleted_at TIMESTAMPTZ,
  29. output_deleted_at TIMESTAMPTZ,
  30. last_error_code VARCHAR(128),
  31. last_error_message TEXT,
  32. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  33. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  34. submitted_at TIMESTAMPTZ,
  35. started_at TIMESTAMPTZ,
  36. finished_at TIMESTAMPTZ,
  37. settled_at TIMESTAMPTZ
  38. );
  39. CREATE INDEX IF NOT EXISTS batch_image_jobs_user_created_at_idx ON batch_image_jobs (user_id, created_at);
  40. CREATE INDEX IF NOT EXISTS batch_image_jobs_status_idx ON batch_image_jobs (status);
  41. CREATE INDEX IF NOT EXISTS batch_image_jobs_provider_status_idx ON batch_image_jobs (provider, status);
  42. CREATE INDEX IF NOT EXISTS batch_image_jobs_idempotency_key_idx ON batch_image_jobs (idempotency_key)
  43. WHERE idempotency_key IS NOT NULL AND idempotency_key <> '';
  44. CREATE UNIQUE INDEX IF NOT EXISTS batch_image_jobs_manifest_hash_uq ON batch_image_jobs (manifest_hash)
  45. WHERE manifest_hash IS NOT NULL AND manifest_hash <> '';
  46. CREATE INDEX IF NOT EXISTS batch_image_jobs_output_expires_at_idx ON batch_image_jobs (output_expires_at);
  47. CREATE TABLE IF NOT EXISTS batch_image_items (
  48. id BIGSERIAL PRIMARY KEY,
  49. job_id VARCHAR(64) NOT NULL REFERENCES batch_image_jobs(batch_id) ON DELETE CASCADE,
  50. custom_id VARCHAR(255) NOT NULL,
  51. status VARCHAR(32) NOT NULL,
  52. request_hash VARCHAR(128),
  53. prompt_preview TEXT,
  54. provider_source_object VARCHAR(1024),
  55. source_line_number INTEGER,
  56. source_byte_offset BIGINT,
  57. source_byte_length BIGINT,
  58. mime_type VARCHAR(128),
  59. file_extension VARCHAR(32),
  60. image_count INTEGER NOT NULL DEFAULT 0,
  61. error_code VARCHAR(128),
  62. error_message TEXT,
  63. billed_amount DECIMAL(20,10),
  64. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  65. indexed_at TIMESTAMPTZ
  66. );
  67. CREATE UNIQUE INDEX IF NOT EXISTS batch_image_items_job_custom_uq ON batch_image_items (job_id, custom_id);
  68. CREATE INDEX IF NOT EXISTS batch_image_items_job_status_idx ON batch_image_items (job_id, status);
  69. CREATE INDEX IF NOT EXISTS batch_image_items_provider_source_object_idx ON batch_image_items (provider_source_object);
  70. CREATE TABLE IF NOT EXISTS batch_image_events (
  71. id BIGSERIAL PRIMARY KEY,
  72. job_id VARCHAR(64) NOT NULL REFERENCES batch_image_jobs(batch_id) ON DELETE CASCADE,
  73. event_type VARCHAR(64) NOT NULL,
  74. payload JSONB,
  75. event_hash VARCHAR(128),
  76. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  77. );
  78. CREATE INDEX IF NOT EXISTS batch_image_events_job_created_at_idx ON batch_image_events (job_id, created_at);
  79. CREATE INDEX IF NOT EXISTS batch_image_events_event_type_idx ON batch_image_events (event_type);
  80. CREATE UNIQUE INDEX IF NOT EXISTS batch_image_events_job_event_hash_uq ON batch_image_events (job_id, event_hash)
  81. WHERE event_hash IS NOT NULL AND event_hash <> '';