feat(platform): add replaceable geozone data layer

This commit is contained in:
Codex
2026-07-20 21:48:27 +03:00
parent 8a7465cf0e
commit 3446f3edc2
31 changed files with 1342 additions and 128 deletions
+26 -3
View File
@@ -61,6 +61,7 @@ export async function migrate(pool) {
`);
await pool.query("create index if not exists external_data_plane_batches_scope_idx on external_data_plane_batches (tenant_id, connection_id, data_product_id, received_at desc)");
await pool.query("alter table external_data_plane_batches add column if not exists current_updated_count integer not null default 0");
await pool.query("alter table external_data_plane_batches add column if not exists current_removed_count integer not null default 0");
await pool.query("alter table external_data_plane_batches add column if not exists history_inserted_count integer not null default 0");
await pool.query("alter table external_data_plane_batches add column if not exists patch_operation_count integer not null default 0");
await pool.query("alter table external_data_plane_batches add column if not exists delivery_cursor bigint");
@@ -245,7 +246,7 @@ export async function migrate(pool) {
observed_at timestamptz not null,
received_at timestamptz not null,
attributes jsonb not null default '{}'::jsonb,
geometry geography(Point, 4326),
geometry geography(Geometry, 4326),
fingerprint text not null,
primary key (id, observed_at),
unique (tenant_id, connection_id, provider_id, data_product_id, source_id, semantic_type, observed_at, fingerprint)
@@ -266,12 +267,30 @@ export async function migrate(pool) {
observed_at timestamptz not null,
received_at timestamptz not null,
attributes jsonb not null default '{}'::jsonb,
geometry geography(Point, 4326),
geometry geography(Geometry, 4326),
fingerprint text not null,
updated_at timestamptz not null default now(),
primary key (tenant_id, connection_id, provider_id, data_product_id, source_id, semantic_type)
)
`);
await pool.query(`
do $$
begin
if exists (
select 1
from pg_attribute
where attrelid = 'external_data_plane_current'::regclass
and attname = 'geometry'
and not attisdropped
and format_type(atttypid, atttypmod) = 'geography(Point,4326)'
) then
alter table external_data_plane_current
alter column geometry type geography(Geometry, 4326)
using geometry::geometry::geography;
end if;
end
$$
`);
await pool.query("create index if not exists external_data_plane_current_scope_idx on external_data_plane_current (tenant_id, connection_id, data_product_id, observed_at desc)");
await pool.query("create index if not exists external_data_plane_current_geometry_idx on external_data_plane_current using gist (geometry)");
@@ -282,10 +301,14 @@ export async function migrate(pool) {
provider_id text not null,
data_product_id text not null,
current_cursor bigint not null default 0,
current_generation_at timestamptz,
current_generation_id text,
updated_at timestamptz not null default now(),
primary key (tenant_id, connection_id, provider_id, data_product_id)
)
`);
await pool.query("alter table external_data_plane_delivery_state add column if not exists current_generation_at timestamptz");
await pool.query("alter table external_data_plane_delivery_state add column if not exists current_generation_id text");
await pool.query(`
create table if not exists external_data_plane_patch_outbox (
@@ -316,7 +339,7 @@ export async function migrate(pool) {
observed_at timestamptz not null,
received_at timestamptz not null,
attributes jsonb not null default '{}'::jsonb,
geometry geography(Point, 4326),
geometry geography(Geometry, 4326),
fingerprint text not null,
updated_at timestamptz not null default now(),
primary key (