feat(landscape): run/node domain, seed migration, repository
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
51
migrations/00011_landscape.sql
Normal file
51
migrations/00011_landscape.sql
Normal file
@@ -0,0 +1,51 @@
|
||||
-- +goose Up
|
||||
-- Landscape Program: seed the category and dataset groups (input slots and
|
||||
-- node outputs; codes must match internal/landscape/graph.go), and store runs.
|
||||
INSERT INTO categories (code, name, description)
|
||||
VALUES ('landscape', 'Ландшафтная программа', 'Входные и результирующие растры Ландшафтной программы')
|
||||
ON CONFLICT (code) DO NOTHING;
|
||||
|
||||
INSERT INTO dataset_groups (code, name) VALUES
|
||||
('lp-z-biodiversity', 'Z Biodiversity'), ('lp-z-lcr', 'Z LCR'), ('lp-z-soil-protection', 'Z Soil Protection'), ('lp-z-wr', 'Z Water Resources'),
|
||||
('lp-u-surf-water', 'U Surface Water'), ('lp-u-soil', 'U Soil'), ('lp-u-crop', 'U Crop'), ('lp-u-veg', 'U Vegetation'),
|
||||
('lp-p-irrigation', 'P Irrigation'), ('lp-p-snow', 'P Snow'), ('lp-p-crop', 'P Crop'), ('lp-p-pasture', 'P Pasture'), ('lp-p-tourism', 'P Tourism'),
|
||||
('lp-z-integrated', 'Z Integrated'), ('lp-u-integrated', 'U Integrated'), ('lp-z-max', 'Z Max'), ('lp-u-max', 'U Max'),
|
||||
('lp-e', 'E Ecological Constraint'),
|
||||
('lp-c-irrigation', 'C Irrigation'), ('lp-c-snow', 'C Snow'), ('lp-c-crop', 'C Crop'), ('lp-c-pasture', 'C Pasture'), ('lp-c-tourism', 'C Tourism'),
|
||||
('lp-p-max', 'P Max'),
|
||||
('lp-v1-conservative', 'V1 Conservative'), ('lp-v2-balanced', 'V2 Balanced'), ('lp-v3-development', 'V3 Development'), ('lp-c-max', 'C Max')
|
||||
ON CONFLICT (code) DO NOTHING;
|
||||
|
||||
CREATE TABLE lp_runs (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
status VARCHAR(32) NOT NULL,
|
||||
from_stage SMALLINT,
|
||||
params JSONB NOT NULL,
|
||||
overrides JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
error TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
started_at TIMESTAMPTZ,
|
||||
finished_at TIMESTAMPTZ
|
||||
);
|
||||
CREATE INDEX idx_lp_runs_created_at ON lp_runs (created_at DESC);
|
||||
|
||||
CREATE TABLE lp_run_nodes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
run_id UUID NOT NULL REFERENCES lp_runs (id) ON DELETE CASCADE,
|
||||
node_code VARCHAR(8) NOT NULL,
|
||||
stage SMALLINT NOT NULL,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
fingerprint TEXT NOT NULL DEFAULT '',
|
||||
input_datasets JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||
output_datasets JSONB,
|
||||
error TEXT,
|
||||
started_at TIMESTAMPTZ,
|
||||
finished_at TIMESTAMPTZ,
|
||||
UNIQUE (run_id, node_code)
|
||||
);
|
||||
CREATE INDEX idx_lp_run_nodes_lookup ON lp_run_nodes (node_code, fingerprint, status, finished_at DESC);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE lp_run_nodes;
|
||||
DROP TABLE lp_runs;
|
||||
-- Seeded category/groups are left in place (datasets may reference them).
|
||||
Reference in New Issue
Block a user