From a23866619d6f04cd191f3183136bae51159a7e1d Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Tue, 14 Apr 2026 14:38:22 +0000 Subject: [PATCH] Start saving client ID on compliance reports --- platform/client.go | 30 +++++++++++++++++++ resource/publicreport_compliance.go | 6 +++- .../{nuisance.go => publicreport_nuisance.go} | 0 resource/{water.go => publicreport_water.go} | 0 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 platform/client.go rename resource/{nuisance.go => publicreport_nuisance.go} (100%) rename resource/{water.go => publicreport_water.go} (100%) diff --git a/platform/client.go b/platform/client.go new file mode 100644 index 00000000..d7cd5faa --- /dev/null +++ b/platform/client.go @@ -0,0 +1,30 @@ +package platform + +import ( + "context" + "fmt" + "time" + + "github.com/Gleipnir-Technology/nidus-sync/db" + "github.com/Gleipnir-Technology/nidus-sync/db/models" + "github.com/aarondl/opt/omit" + "github.com/google/uuid" +) + +func EnsureClient(ctx context.Context, client uuid.UUID, user_agent string) error { + _, err := models.PublicreportClients.Query( + models.SelectWhere.PublicreportClients.UUID.EQ(client), + ).One(ctx, db.PGInstance.BobDB) + if err != nil { + if err.Error() == "sql: no rows in result set" { + return nil + } + return fmt.Errorf("failed existing client %s: %w", client.String(), err) + } + models.PublicreportClients.Insert(&models.PublicreportClientSetter{ + Created: omit.From(time.Now()), + UserAgent: omit.From(user_agent), + UUID: omit.From(client), + }).One(ctx, db.PGInstance.BobDB) + return nil +} diff --git a/resource/publicreport_compliance.go b/resource/publicreport_compliance.go index b7aec37e..e7edd891 100644 --- a/resource/publicreport_compliance.go +++ b/resource/publicreport_compliance.go @@ -13,6 +13,7 @@ import ( nhttp "github.com/Gleipnir-Technology/nidus-sync/http" "github.com/Gleipnir-Technology/nidus-sync/platform" "github.com/Gleipnir-Technology/nidus-sync/platform/types" + "github.com/google/uuid" "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) @@ -47,10 +48,13 @@ func (res *complianceR) ByID(ctx context.Context, r *http.Request, query QueryPa return report, nil } func (res *complianceR) Create(ctx context.Context, r *http.Request, n publicreportComplianceForm) (*compliance, *nhttp.ErrorWithStatus) { + user_agent := r.Header.Get("User-Agent") + platform.EnsureClient(ctx, n.ClientID, user_agent) setter_report := models.PublicreportReportSetter{ //AddressID: omitnull.From(latlng.Cell.String()), AddressGid: omit.From(""), AddressRaw: omit.From(""), + ClientUUID: omitnull.From(n.ClientID), Created: omit.From(time.Now()), //H3cell: omitnull.From(latlng.Cell.String()), LatlngAccuracyType: omit.From(enums.PublicreportAccuracytypeBrowser), @@ -100,7 +104,7 @@ type publicreportComplianceForm struct { AccessInstructions omit.Val[string] `schema:"access_instructions" json:"access_instructions"` Address omit.Val[types.Address] `schema:"address" json:"address"` AvailabilityNotes omit.Val[string] `schema:"availability_notes" json:"availability_notes"` - ClientID string `schema:"client_id" json:"client_id"` + ClientID uuid.UUID `schema:"client_id" json:"client_id"` Comments omit.Val[string] `schema:"comments" json:"comments"` GateCode omit.Val[string] `schema:"gate_code" json:"gate_code"` HasDog omitnull.Val[bool] `schema:"has_dog" json:"has_dog"` diff --git a/resource/nuisance.go b/resource/publicreport_nuisance.go similarity index 100% rename from resource/nuisance.go rename to resource/publicreport_nuisance.go diff --git a/resource/water.go b/resource/publicreport_water.go similarity index 100% rename from resource/water.go rename to resource/publicreport_water.go