Добавляет bbox-поиск участков для карты Site Finder (issue #307): - GET /api/v1/parcels/by-bbox с query params min_lat/min_lon/max_lat/max_lon/limit/user_id - Overlay статуса из parcel_user_status (user_id опционален) - Pydantic schemas: ParcelMapMarker, ParcelBboxResponse в app/schemas/parcel.py - SQL-миграция 119_parcel_user_status.sql (CREATE TABLE IF NOT EXISTS + индексы) - 4 unit-теста: valid bbox / invalid bbox (400) / status overlay / no-user-id null status
21 lines
648 B
PL/PgSQL
21 lines
648 B
PL/PgSQL
BEGIN;
|
|
|
|
CREATE TABLE IF NOT EXISTS parcel_user_status (
|
|
user_id text NOT NULL,
|
|
cad_num text NOT NULL,
|
|
status text NOT NULL CHECK (status IN ('in_work', 'favorite', 'dismissed')),
|
|
notes text,
|
|
updated_at timestamptz NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (user_id, cad_num)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS parcel_user_status_cad_idx
|
|
ON parcel_user_status (cad_num);
|
|
|
|
CREATE INDEX IF NOT EXISTS parcel_user_status_user_idx
|
|
ON parcel_user_status (user_id, status);
|
|
|
|
COMMENT ON TABLE parcel_user_status
|
|
IS '#307 SF-B1 user-marked parcels (in_work/favorite/dismissed) для карты.';
|
|
|
|
COMMIT;
|