diff --git a/internal/store/migrations/0007_batch_import_runs.sql b/internal/store/migrations/0007_batch_import_runs.sql new file mode 100644 index 00000000..6105db03 --- /dev/null +++ b/internal/store/migrations/0007_batch_import_runs.sql @@ -0,0 +1,65 @@ +CREATE TABLE import_runs ( + run_id TEXT PRIMARY KEY, + mode TEXT NOT NULL, + access_mode TEXT NOT NULL, + state TEXT NOT NULL, + total_items INTEGER NOT NULL DEFAULT 0, + completed_items INTEGER NOT NULL DEFAULT 0, + active_items INTEGER NOT NULL DEFAULT 0, + degraded_items INTEGER NOT NULL DEFAULT 0, + broken_items INTEGER NOT NULL DEFAULT 0, + warning_items INTEGER NOT NULL DEFAULT 0, + started_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + finished_at TEXT NULL, + CHECK (mode IN ('strict', 'partial')), + CHECK (access_mode IN ('subscription', 'self_service')), + CHECK (state IN ('running', 'completed', 'completed_with_warnings', 'failed', 'cancelled')) +); + +CREATE INDEX idx_import_runs_started_at ON import_runs(started_at DESC); +CREATE INDEX idx_import_runs_state ON import_runs(state); +CREATE INDEX idx_import_runs_access_mode ON import_runs(access_mode); + +CREATE TABLE import_run_items ( + item_id TEXT PRIMARY KEY, + run_id TEXT NOT NULL, + base_url TEXT NOT NULL, + provider_id TEXT NOT NULL, + requested_models_json TEXT NOT NULL DEFAULT '[]', + raw_models_json TEXT NOT NULL DEFAULT '[]', + normalized_models_json TEXT NOT NULL DEFAULT '[]', + recommended_models_json TEXT NOT NULL DEFAULT '[]', + resolved_smoke_model TEXT NULL, + capability_profile_json TEXT NOT NULL DEFAULT '{}', + current_stage TEXT NOT NULL, + confirmation_status TEXT NOT NULL, + access_status TEXT NOT NULL, + channel_id INTEGER NULL, + account_id INTEGER NULL, + retry_count INTEGER NOT NULL DEFAULT 0, + confirmation_attempts INTEGER NOT NULL DEFAULT 0, + last_retry_at TEXT NULL, + next_retry_at TEXT NULL, + lease_owner TEXT NULL, + lease_until TEXT NULL, + advisory_messages_json TEXT NOT NULL DEFAULT '[]', + last_error_stage TEXT NULL, + last_error TEXT NULL, + legacy_batch_id INTEGER NULL, + legacy_provider_id TEXT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_import_run_items_run FOREIGN KEY (run_id) REFERENCES import_runs(run_id) ON DELETE CASCADE, + CHECK (current_stage IN ('probe', 'provision', 'confirm', 'validate', 'done')), + CHECK (confirmation_status IN ('pending', 'confirmed', 'advisory', 'failed')), + CHECK (access_status IN ('unknown', 'active', 'degraded', 'broken')) +); + +CREATE INDEX idx_import_run_items_run_id ON import_run_items(run_id); +CREATE INDEX idx_import_run_items_provider_id ON import_run_items(provider_id); +CREATE INDEX idx_import_run_items_current_stage ON import_run_items(current_stage); +CREATE INDEX idx_import_run_items_confirmation_status ON import_run_items(confirmation_status); +CREATE INDEX idx_import_run_items_access_status ON import_run_items(access_status); +CREATE INDEX idx_import_run_items_next_retry_at ON import_run_items(next_retry_at); +CREATE INDEX idx_import_run_items_lease_until ON import_run_items(lease_until); diff --git a/internal/store/migrations/0008_batch_import_run_events.sql b/internal/store/migrations/0008_batch_import_run_events.sql new file mode 100644 index 00000000..d82689e1 --- /dev/null +++ b/internal/store/migrations/0008_batch_import_run_events.sql @@ -0,0 +1,19 @@ +CREATE TABLE import_run_item_events ( + event_id TEXT PRIMARY KEY, + run_id TEXT NOT NULL, + item_id TEXT NOT NULL, + event_type TEXT NOT NULL, + stage TEXT NOT NULL, + attempt INTEGER NOT NULL DEFAULT 0, + message TEXT NOT NULL, + payload_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_import_run_item_events_run FOREIGN KEY (run_id) REFERENCES import_runs(run_id) ON DELETE CASCADE, + CONSTRAINT fk_import_run_item_events_item FOREIGN KEY (item_id) REFERENCES import_run_items(item_id) ON DELETE CASCADE +); + +CREATE INDEX idx_import_run_item_events_run_id ON import_run_item_events(run_id); +CREATE INDEX idx_import_run_item_events_item_id ON import_run_item_events(item_id); +CREATE INDEX idx_import_run_item_events_created_at ON import_run_item_events(created_at); +CREATE INDEX idx_import_run_item_events_stage ON import_run_item_events(stage); +CREATE INDEX idx_import_run_item_events_type ON import_run_item_events(event_type);