From 3ae72c89447ff1f41b4c98d56f5396b08866f6b8 Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Tue, 14 Apr 2026 01:20:52 +0000 Subject: [PATCH] Check for address before inserting a new one. --- api/routes.go | 2 +- platform/geocode/address.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/api/routes.go b/api/routes.go index c393af16..7535994a 100644 --- a/api/routes.go +++ b/api/routes.go @@ -42,7 +42,7 @@ func AddRoutes(r *mux.Router) { review_task := resource.ReviewTask(r) r.Handle("/review-task", authenticatedHandlerJSON(review_task.List)).Methods("GET") compliance := resource.Compliance(router) - r.HandleFunc("/rmo/compliance", handlerFormPost(compliance.Create)).Methods("POST") + r.HandleFunc("/rmo/compliance", handlerJSONPost(compliance.Create)).Methods("POST") nuisance := resource.Nuisance(router) r.HandleFunc("/rmo/nuisance", handlerFormPost(nuisance.Create)).Methods("POST") water := resource.Water(router) diff --git a/platform/geocode/address.go b/platform/geocode/address.go index 2491aabe..d4065ef4 100644 --- a/platform/geocode/address.go +++ b/platform/geocode/address.go @@ -60,6 +60,15 @@ func ensureAddressFromFeature(ctx context.Context, txn bob.Executor, feature sta if err != nil { return 0, fmt.Errorf("failed to convert lat %f lng %f to h3 cell", lat, lng) } + a, err := models.Addresses.Query( + models.SelectWhere.Addresses.Gid.EQ(feature.Properties.GID), + ).One(ctx, txn) + if err != nil && err.Error() != "sql: no rows in result set" { + return 0, fmt.Errorf("query address: %w", err) + } + if err == nil { + return a.ID, nil + } query := addressQuery() query.Apply( im.Values( @@ -76,6 +85,7 @@ func ensureAddressFromFeature(ctx context.Context, txn bob.Executor, feature sta psql.Arg(feature.Street()), psql.Raw("''"), ), + im.OnConflict("gid").DoNothing(), ) row, err := bob.One(ctx, txn, query, scan.StructMapper[_rowWithID]()) log.Info().Int32("id", row.ID).Msg("inserted address")