Merge branch 'feature/assets-s3-sharing'
CI / test (push) Successful in 3s

Integrate asset metadata/storage support, TypeScript client asset APIs, docs updates, and the Leaflet demo while resolving conflicts with recent challenge IP/login persistence changes on main.

Made-with: Cursor
This commit is contained in:
2026-03-02 21:23:31 +00:00
29 changed files with 2128 additions and 69 deletions
+28
View File
@@ -0,0 +1,28 @@
CREATE TABLE IF NOT EXISTS assets (
id TEXT PRIMARY KEY,
owner_key TEXT NOT NULL,
checksum TEXT NOT NULL,
ext TEXT NOT NULL,
kind TEXT NOT NULL,
mime_type TEXT,
size_bytes BIGINT NOT NULL DEFAULT 0,
object_key TEXT NOT NULL,
is_public BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (owner_key, checksum, ext),
UNIQUE (owner_key, object_key)
);
CREATE TABLE IF NOT EXISTS feature_asset_links (
feature_id TEXT NOT NULL REFERENCES features(id) ON DELETE CASCADE,
asset_id TEXT NOT NULL REFERENCES assets(id) ON DELETE CASCADE,
name TEXT,
description TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (feature_id, asset_id)
);
CREATE INDEX IF NOT EXISTS idx_assets_owner ON assets(owner_key);
CREATE INDEX IF NOT EXISTS idx_assets_owner_public ON assets(owner_key, is_public);
CREATE INDEX IF NOT EXISTS idx_feature_asset_links_asset ON feature_asset_links(asset_id);
@@ -0,0 +1,21 @@
CREATE EXTENSION IF NOT EXISTS postgis;
ALTER TABLE features
ADD COLUMN IF NOT EXISTS geom geometry(PointZ, 4326);
UPDATE features
SET geom = ST_SetSRID(
ST_MakePoint(
(geometry->'coordinates'->>0)::double precision,
(geometry->'coordinates'->>1)::double precision,
CASE
WHEN jsonb_array_length(geometry->'coordinates') >= 3 THEN (geometry->'coordinates'->>2)::double precision
ELSE 0
END
),
4326
)
WHERE geom IS NULL
AND geometry ? 'coordinates';
CREATE INDEX IF NOT EXISTS idx_features_geom_gist ON features USING GIST (geom);