feat(parcel-sync): native PostGIS geometry support for QGIS
- Remove postgresqlExtensions/postgis from Prisma schema (PostGIS not yet installed) - Add prisma/postgis-setup.sql: trigger auto-converts GeoJSON→native geometry, GiST spatial index, QGIS-friendly views (gis_terenuri, gis_cladiri, etc.) - Add POST /api/eterra/setup-postgis endpoint (idempotent, runs all SQL setup) - Add safety-net raw SQL in sync-service: backfills geom after upsert phase - Add QGIS/PostGIS setup card in layer catalog UI with connection info - Schema comment documents the trigger-managed 'geom' column approach
This commit is contained in:
+15
-15
@@ -1,12 +1,10 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
previewFeatures = ["postgresqlExtensions"]
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
extensions = [postgis]
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model KeyValueStore {
|
||||
@@ -24,20 +22,22 @@ model KeyValueStore {
|
||||
// ─── GIS: eTerra ParcelSync ────────────────────────────────────────
|
||||
|
||||
model GisFeature {
|
||||
id String @id @default(uuid())
|
||||
layerId String // e.g. TERENURI_ACTIVE, CLADIRI_ACTIVE
|
||||
id String @id @default(uuid())
|
||||
layerId String // e.g. TERENURI_ACTIVE, CLADIRI_ACTIVE
|
||||
siruta String
|
||||
objectId Int // eTerra OBJECTID (unique per layer)
|
||||
objectId Int // eTerra OBJECTID (unique per layer)
|
||||
inspireId String?
|
||||
cadastralRef String? // NATIONAL_CADASTRAL_REFERENCE
|
||||
cadastralRef String? // NATIONAL_CADASTRAL_REFERENCE
|
||||
areaValue Float?
|
||||
isActive Boolean @default(true)
|
||||
attributes Json // all raw eTerra attributes
|
||||
geometry Json? // GeoJSON geometry (Polygon/MultiPolygon)
|
||||
isActive Boolean @default(true)
|
||||
attributes Json // all raw eTerra attributes
|
||||
geometry Json? // GeoJSON geometry (Polygon/MultiPolygon)
|
||||
// NOTE: native PostGIS column 'geom' is managed via SQL trigger (see prisma/postgis-setup.sql)
|
||||
// Prisma doesn't need to know about it — trigger auto-populates from geometry JSON
|
||||
syncRunId String?
|
||||
projectId String? // link to project tag
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
projectId String? // link to project tag
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
syncRun GisSyncRun? @relation(fields: [syncRunId], references: [id])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user