From dba8b6c4756092c41c53e6ddbeab4d6d2763aed7 Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Tue, 28 Apr 2026 07:12:12 +0000 Subject: [PATCH] Consistently use the correct public URI for public reports --- resource/communication.go | 2 +- resource/publicreport.go | 10 +++++++-- resource/publicreport_compliance.go | 33 ++++++++++++++++------------- resource/publicreport_nuisance.go | 29 +++++++++++++------------ resource/publicreport_water.go | 2 +- ts/rmo/view/Compliance.vue | 2 +- 6 files changed, 45 insertions(+), 33 deletions(-) diff --git a/resource/communication.go b/resource/communication.go index c0b5494d..b013ef90 100644 --- a/resource/communication.go +++ b/resource/communication.go @@ -54,7 +54,7 @@ func (res *communicationR) List(ctx context.Context, r *http.Request, user platf comms := make([]communication, len(reports)) for i, report := range reports { populateDistrictURI(report, res.router) - populateReportURI(report, res.router) + populateReportURI(report, res.router, false) comms[i] = communication{ Created: report.Created, ID: report.PublicID, diff --git a/resource/publicreport.go b/resource/publicreport.go index 516998c0..336d0674 100644 --- a/resource/publicreport.go +++ b/resource/publicreport.go @@ -91,8 +91,14 @@ func populateDistrictURI(report *types.PublicReport, r *router) error { report.District = &district_uri return nil } -func populateReportURI(report *types.PublicReport, r *router) error { - uri, err := reportURI(r, report.Type, report.PublicID) +func populateReportURI(report *types.PublicReport, r *router, is_public bool) error { + var err error + var uri string + if is_public { + uri, err = reportURIPublic(r, report.Type, report.PublicID) + } else { + uri, err = reportURI(r, report.Type, report.PublicID) + } if err != nil { return fmt.Errorf("report uri: %w", err) } diff --git a/resource/publicreport_compliance.go b/resource/publicreport_compliance.go index 4b4857df..42be997b 100644 --- a/resource/publicreport_compliance.go +++ b/resource/publicreport_compliance.go @@ -46,19 +46,10 @@ type publicreportComplianceForm struct { } func (res *complianceR) ByID(ctx context.Context, r *http.Request, u platform.User, query QueryParams) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { - return res.ByIDPublic(ctx, r, query) + return res.byID(ctx, r, false) } func (res *complianceR) ByIDPublic(ctx context.Context, r *http.Request, query QueryParams) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { - vars := mux.Vars(r) - public_id := vars["id"] - if public_id == "" { - return nil, nhttp.NewBadRequest("You must provid an ID") - } - report, err := platform.PublicReportByIDCompliance(ctx, public_id, true) - if err != nil { - return nil, nhttp.NewError("get report: %w", err) - } - return res.complianceHydrate(report) + return res.byID(ctx, r, true) } func (res *complianceR) Create(ctx context.Context, r *http.Request, n publicreportComplianceForm) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { if n.District.IsUnset() && n.MailerID.IsUnset() { @@ -139,7 +130,7 @@ func (res *complianceR) Create(ctx context.Context, r *http.Request, n publicrep if err != nil { return nil, nhttp.NewError("get report after creation: %w", err) } - return res.complianceHydrate(result) + return res.complianceHydrate(result, true) } func (res *complianceR) Update(ctx context.Context, r *http.Request, prf publicreportComplianceForm) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { vars := mux.Vars(r) @@ -213,7 +204,7 @@ func (res *complianceR) Update(ctx context.Context, r *http.Request, prf publicr if err != nil { return nil, nhttp.NewError("get report after update: %w", err) } - return res.complianceHydrate(report) + return res.complianceHydrate(report, true) } type publicreportComplianceFormSubmit struct { @@ -232,9 +223,21 @@ func (res *complianceR) Submit(ctx context.Context, r *http.Request, prf publicr } return report, nil } -func (res *complianceR) complianceHydrate(report *types.PublicReportCompliance) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { +func (res *complianceR) byID(ctx context.Context, r *http.Request, is_public bool) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { + vars := mux.Vars(r) + public_id := vars["id"] + if public_id == "" { + return nil, nhttp.NewBadRequest("You must provid an ID") + } + report, err := platform.PublicReportByIDCompliance(ctx, public_id, true) + if err != nil { + return nil, nhttp.NewError("get report: %w", err) + } + return res.complianceHydrate(report, is_public) +} +func (res *complianceR) complianceHydrate(report *types.PublicReportCompliance, is_public bool) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) { populateDistrictURI(&report.PublicReport, res.router) - populateReportURI(&report.PublicReport, res.router) + populateReportURI(&report.PublicReport, res.router, is_public) for _, e := range report.Concerns { e.PopulateURL(res.router.router) } diff --git a/resource/publicreport_nuisance.go b/resource/publicreport_nuisance.go index ec19a5b7..098f53b9 100644 --- a/resource/publicreport_nuisance.go +++ b/resource/publicreport_nuisance.go @@ -52,21 +52,10 @@ type nuisanceForm struct { } func (res *nuisanceR) ByID(ctx context.Context, r *http.Request, u platform.User, query QueryParams) (*types.PublicReportNuisance, *nhttp.ErrorWithStatus) { - return res.ByIDPublic(ctx, r, query) + return res.byID(ctx, r, false) } func (res *nuisanceR) ByIDPublic(ctx context.Context, r *http.Request, query QueryParams) (*types.PublicReportNuisance, *nhttp.ErrorWithStatus) { - vars := mux.Vars(r) - public_id := vars["id"] - if public_id == "" { - return nil, nhttp.NewBadRequest("You must provid an ID") - } - report, err := platform.PublicReportByIDNuisance(ctx, public_id, true) - if err != nil { - return nil, nhttp.NewError("get report: %w", err) - } - populateDistrictURI(&report.PublicReport, res.router) - populateReportURI(&report.PublicReport, res.router) - return report, nil + return res.byID(ctx, r, true) } func (res *nuisanceR) Create(ctx context.Context, r *http.Request, n nuisanceForm) (*nuisance, *nhttp.ErrorWithStatus) { user_agent := r.Header.Get("User-Agent") @@ -152,3 +141,17 @@ func (res *nuisanceR) Create(ctx context.Context, r *http.Request, n nuisanceFor URI: uri, }, nil } +func (res *nuisanceR) byID(ctx context.Context, r *http.Request, is_public bool) (*types.PublicReportNuisance, *nhttp.ErrorWithStatus) { + vars := mux.Vars(r) + public_id := vars["id"] + if public_id == "" { + return nil, nhttp.NewBadRequest("You must provid an ID") + } + report, err := platform.PublicReportByIDNuisance(ctx, public_id, true) + if err != nil { + return nil, nhttp.NewError("get report: %w", err) + } + populateDistrictURI(&report.PublicReport, res.router) + populateReportURI(&report.PublicReport, res.router, is_public) + return report, nil +} diff --git a/resource/publicreport_water.go b/resource/publicreport_water.go index bc6dd3e1..58733729 100644 --- a/resource/publicreport_water.go +++ b/resource/publicreport_water.go @@ -149,6 +149,6 @@ func (res *waterR) byID(ctx context.Context, r *http.Request, is_public bool) (* return nil, nhttp.NewError("get report: %w", err) } populateDistrictURI(&report.PublicReport, res.router) - populateReportURI(&report.PublicReport, res.router) + populateReportURI(&report.PublicReport, res.router, is_public) return report, nil } diff --git a/ts/rmo/view/Compliance.vue b/ts/rmo/view/Compliance.vue index 053181a0..8faa869d 100644 --- a/ts/rmo/view/Compliance.vue +++ b/ts/rmo/view/Compliance.vue @@ -53,7 +53,7 @@ import type { Image } from "@/components/ImageUpload.vue"; import { useStoreDistrict } from "@/rmo/store/district"; import { useStoreLocal } from "@/store/local"; import { useStoreLocation } from "@/store/location"; -import { useStorePublicReport } from "@/store/publicreport"; +import { useStorePublicReport } from "@/rmo/store/publicreport"; import Intro from "@/rmo/content/compliance/Intro.vue"; import LoadingOverlay from "@/components/LoadingOverlay.vue"; import {