feat(store): add batch import runtime tables

This commit is contained in:
phamnazage-jpg
2026-05-22 13:47:47 +08:00
parent 9cdb7e1112
commit 9ba1c92da2
2 changed files with 84 additions and 0 deletions

View File

@@ -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);

View File

@@ -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);