From 31f3fee7dba4b33038ef466642bd1787a42c91cf Mon Sep 17 00:00:00 2001 From: Roberto Fontanarosa Date: Fri, 27 Sep 2024 15:21:39 +0200 Subject: [PATCH] fixed property merge --- functions/src/on-create-loi.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/functions/src/on-create-loi.ts b/functions/src/on-create-loi.ts index 406dac0da..d469158f1 100644 --- a/functions/src/on-create-loi.ts +++ b/functions/src/on-create-loi.ts @@ -20,12 +20,10 @@ import {getDatastore} from './common/context'; import {Datastore} from './common/datastore'; import {broadcastSurveyUpdate} from './common/broadcast-survey-update'; import {GroundProtos} from '@ground/proto'; -import {registry} from '@ground/lib'; +import {toGeoJsonGeometry, toMessage} from '@ground/lib'; import {geojsonToWKT} from '@terraformer/wkt'; -import {toLoiPbProperties} from './import-geojson'; import Pb = GroundProtos.ground.v1beta1; -const l = registry.getFieldIds(Pb.LocationOfInterest); type Properties = {[key: string]: string | number}; @@ -45,13 +43,17 @@ export async function onCreateLoiHandler( if (!loiId || !data) return; + const pb = toMessage(data, Pb.LocationOfInterest) as Pb.LocationOfInterest; + + const geometry = toGeoJsonGeometry(pb.geometry!); + const db = getDatastore(); - let properties = {} as Properties; + let properties = propertiesPbToObject(pb.properties) || {}; const propertyGenerators = await db.fetchPropertyGenerators(); - const wkt = geojsonToWKT(Datastore.fromFirestoreMap(data[l.geometry])); + const wkt = geojsonToWKT(Datastore.fromFirestoreMap(geometry)); for (const propertyGeneratorDoc of propertyGenerators.docs) { properties = await updateProperties( @@ -65,10 +67,7 @@ export async function onCreateLoiHandler( .forEach(key => (properties[key] = JSON.stringify(properties[key]))); } - await db.updateLoiProperties(surveyId, loiId, { - ...data[l.properties], - ...toLoiPbProperties(properties), - }); + await db.updateLoiProperties(surveyId, loiId, properties); await broadcastSurveyUpdate(context.params.surveyId); } @@ -126,3 +125,16 @@ function removePrefixedKeys(obj: Properties, prefix: string): Properties { }); return obj; } + +function propertiesPbToObject(pb: { + [k: string]: Pb.LocationOfInterest.IProperty; +}): Properties { + const properties: {[k: string]: string | number} = {}; + for (const k of Object.keys(pb)) { + const v = pb[k].stringValue || pb[k].numericValue; + if (v !== null && v !== undefined) { + properties[k] = v; + } + } + return properties; +}