-
+
-
Notifications
+
Uploads
- Configure email alerts, SMS notifications, and reporting
- preferences.
+ Upload files (spreadsheets, scans, notes) to make the data
+ available to Nidus
diff --git a/html/template/sync/setting-user-add.html b/html/template/sync/configuration/user-add.html
similarity index 100%
rename from html/template/sync/setting-user-add.html
rename to html/template/sync/configuration/user-add.html
diff --git a/html/template/sync/setting-user-list.html b/html/template/sync/configuration/user-list.html
similarity index 100%
rename from html/template/sync/setting-user-list.html
rename to html/template/sync/configuration/user-list.html
diff --git a/html/template/sync/intelligence-root.html b/html/template/sync/intelligence-root.html
new file mode 100644
index 00000000..9082ed13
--- /dev/null
+++ b/html/template/sync/intelligence-root.html
@@ -0,0 +1,295 @@
+{{ template "sync/layout/authenticated.html" . }}
+
+{{ define "title" }}Planning{{ end }}
+{{ define "extraheader" }}
+
+
+
+
+{{ end }}
+{{ define "content" }}
+
+
+
+
+
Daily Planning Workbench
+
+ Signals and leads enter from the left, are investigated in the center,
+ and transformed into structured field assignments using tools on the
+ right.
+
+
+
+
+
+
+
+
+
+
+
+
+
Species
+
+ All Species
+ Aedes aegypti
+ Aedes albopictus
+ Culex pipiens
+ Culex tarsalis
+
+
+
Signal Type
+
+ All Types
+ Public Report
+ Trap Spike
+ Surveillance Observation
+ Residual Expiring
+ Plan Follow-Up
+
+
+
Sort By
+
+ Newest First
+ Highest Priority
+ Most Signals Linked
+ Strongest Species Signal
+
+
+
+
+
+
+
+
Signals
+
+
+
+ Public Report – Service Request #1024
+
+
+ Aedes aegypti • Standing Water Complaint
+
+
+
+
+
+ Trap Spike – H3 8828308281fffff
+
+
Culex pipiens • Adult Surge
+
+
+
+
+ Residual Expiring – Parcel 45-233-01
+
+
Reinspection Due
+
+
+
+
+
+
+
+
Mosquito Control Plan Follow-Ups
+
+
+
+ Plan Follow-Up – Greenway HOA Basin
+
+
+ Residential Section • Verification Required
+
+
Plan
+
+
+
+
+ Plan Follow-Up – Ag Irrigation Canal 7B
+
+
Ag Section • Monitoring Window
+
Plan
+
+
+
+
+
+
+
+
Existing Leads
+
+
+
Lead #L-204
+
3 Signals • Aedes aegypti
+
+
+
+
Lead #L-198
+
2 Signals • Culex pipiens
+
+
+
+
+
+
+
+
+
+
+
+
+ Map Placeholder
+ H3 Cells • Parcels • Signal Density • Lead Clusters
+
+
+
+
+
+
+
Selected Signals
+
3 Signals Selected
+
+ Public Report – Aedes aegypti
+ Trap Spike – Culex pipiens
+ Plan Follow-Up – HOA Basin
+
+
+
+
+
+
+
+
+
Derived Lead Strength
+
Signal Convergence Score
+
+ High Confidence
+
+
+
+
+
+
+
+
+
Related Communications
+
Inbound & outbound contact
+
+ Resident follow-up requested
+ HOA notification sent
+
+
+
+
+
+
+
+
+
Priority Context
+
Risk synthesis
+
Elevated Aedes Risk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Signal → Lead
+
+ Create New Lead from Selection
+
+
+ Add Signals to Existing Lead
+
+
+ Mark Signal as Addressed
+
+
+
+
+
+
+
Lead → Field Assignment
+
+ Create Proposed Assignment
+
+
+ Add Leads to Existing Assignment
+
+
+ Split Lead
+
+
+
+
+
+
+
Assignment Controls
+
+ Set Priority
+
+
+ Estimate Effort
+
+
+ Send to Operations
+
+
+
+
+
+
+{{ end }}
diff --git a/html/template/sync/operations-root.html b/html/template/sync/operations-root.html
new file mode 100644
index 00000000..7ff3ba76
--- /dev/null
+++ b/html/template/sync/operations-root.html
@@ -0,0 +1,432 @@
+{{ template "sync/layout/authenticated.html" . }}
+
+{{ define "title" }}Planning{{ end }}
+{{ define "extraheader" }}
+
+
+
+
+{{ end }}
+{{ define "content" }}
+
+
+
+
+
Operations Command Center
+
+
+
+ Add Emergent Assignment
+
+ Close Day
+
+
+
+
+
+
+
+ Planning Mode
+
+
+
+
+ Live Mode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Larval Habitat Inspection
+ Planned
+
+
Residential · Backpack Blower
+
+
+
+
+
+
+
+
+ Green Pool Treatment
+ Emergent
+
+
Residential · Larvicide · Access Clearance
+
+
+
+
+
+
+
+
+
+
+
+
+ Map: Selected Assignments, Selected Technicians, Proposed Routes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Technician A
+ Available
+
+
Residential · ULV · Backpack
+
+ Assigned Vehicle
+
+
+ Truck 12 · ULV · Backpack · Larvicide Kit
+
+ ATV 3 · Dipper · Granular Spreader
+ Reserve Vehicle · Minimal Equipment
+
+
+
+
+
+
+
+
+
+
+ Technician B
+ In
+ Field
+
+
Agricultural · Capacity Exceeded
+
+ Assigned Vehicle
+
+
+ Truck 12 · ULV · Backpack · Larvicide Kit
+
+
+ ATV 3 · Dipper · Granular Spreader
+
+ Reserve Vehicle · Minimal Equipment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Route: Technician A
+
5 Assignments · Est. 4.5 hrs · Equipment: Backpack
+
+
+ View Assignments
+
+
+ Modify Route
+
+
+ Shift Assignment
+
+
+ Swap Technician
+
+
+
+
+
Route: Technician B
+
6 Assignments · Est. 6 hrs · Equipment: ATV
+
+
+ View Assignments
+
+
+ Modify Route
+
+
+ Shift Assignment
+
+
+ Swap Technician
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unassigned Assignments
+ 2 awaiting routing
+
+
+
+ Green Pool Reinspection
+ Communication Pending
+
+
+ Storm Drain Treatment
+ In Progress
+
+
+
+
+
+
+
+
+
+ Live Map: Active Routes, Technician Position, Route Progress
+
+
+
+
+
+
+
+
+
+
+
+ Technician A
+ On Track
+
+
72% Complete · 1.5 hrs Remaining
+
+
+
+ Technician C
+ Support Requested
+
+
Equipment Issue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Technician
+ Assignments
+ Estimated Completion
+ Remaining Time
+ Status
+ Actions
+
+
+
+
+ Technician A
+ 5
+ 3:45 PM
+ 1 hr 30 min
+ On Track
+
+
+ View Route
+
+
+ Reallocate
+
+
+
+
+ Technician C
+ 4
+ 4:30 PM
+ 2 hrs
+ Blocked
+
+
+ View Route
+
+
+ Assist
+
+
+
+
+
+
+
+
+
+
+
+{{ end }}
diff --git a/html/template/sync/review-root.html b/html/template/sync/review-root.html
new file mode 100644
index 00000000..7bae275e
--- /dev/null
+++ b/html/template/sync/review-root.html
@@ -0,0 +1,350 @@
+{{ template "sync/layout/authenticated.html" . }}
+
+{{ define "title" }}Planning{{ end }}
+{{ define "extraheader" }}
+
+
+
+
+{{ end }}
+{{ define "content" }}
+
+
+
+
+
+
+
+
+
+
+
Acres Treated
+
318.4
+
+
-5%
+
+
+
+
+
+
+
+
+
+ High acreage deviation
+ System
+
+
+ Product-to-acre variance
+ System
+
+
+ Rare task combination
+ Review
+
+
+
+
+
+
+
+
+ Recommendation Acceptance: 78%
+
+
Time Saved vs Plan: +6%
+
Override Logs: 5
+
+
+
+
+
+
+
+
+
+
+
+
+
Interactive Map Placeholder
+
Spatial context for records, anomalies, and follow-ups.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date
+
+
+
+ Section
+
+ All Sections
+ Residential
+ Agricultural
+
+
+
+ Technician
+
+ All Technicians
+
+
+
+
+ Show only flagged
+
+
+
+ Open questions
+
+
+ Filter by Tag
+
+ All Tags
+ Training
+ Data Quality
+ System: Acreage Outlier
+
+
+
+
+
+
+
+
+ Flag for Follow-up
+ Mark as Reviewed
+ Add Comment
+ Export
+
+
+
+
+
+
+
+{{ end }}
diff --git a/sync/communication.go b/sync/communication.go
new file mode 100644
index 00000000..bed9a5d4
--- /dev/null
+++ b/sync/communication.go
@@ -0,0 +1,14 @@
+package sync
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/Gleipnir-Technology/nidus-sync/db/models"
+)
+
+type contentCommunicationRoot struct{}
+
+func getCommunicationRoot(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentCommunicationRoot], *errorWithStatus) {
+ return newResponse("sync/communication-root.html", contentCommunicationRoot{}), nil
+}
diff --git a/sync/config.go b/sync/config.go
deleted file mode 100644
index dc1e975c..00000000
--- a/sync/config.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package sync
-
-import (
- "github.com/Gleipnir-Technology/nidus-sync/config"
-)
-
-type contentConfig struct {
- IsProductionEnvironment bool
-}
-
-func newContentConfig() contentConfig {
- return contentConfig{
- IsProductionEnvironment: config.IsProductionEnvironment(),
- }
-}
diff --git a/sync/configuration.go b/sync/configuration.go
new file mode 100644
index 00000000..1a2ed261
--- /dev/null
+++ b/sync/configuration.go
@@ -0,0 +1,117 @@
+package sync
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/Gleipnir-Technology/nidus-sync/arcgis"
+ "github.com/Gleipnir-Technology/nidus-sync/config"
+ "github.com/Gleipnir-Technology/nidus-sync/db"
+ "github.com/Gleipnir-Technology/nidus-sync/db/models"
+ //"github.com/rs/zerolog/log"
+)
+
+type contentConfig struct {
+ IsProductionEnvironment bool
+}
+
+func newContentConfig() contentConfig {
+ return contentConfig{
+ IsProductionEnvironment: config.IsProductionEnvironment(),
+ }
+}
+
+type contentConfigurationRoot struct{}
+
+func getConfigurationRoot(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentConfigurationRoot], *errorWithStatus) {
+ return newResponse("sync/configuration/root.html", contentConfigurationRoot{}), nil
+}
+
+type contentSettingOrganization struct {
+ Organization *models.Organization
+}
+
+type contentSettingIntegration struct {
+ ArcGISOAuth *models.OauthToken
+}
+
+func getConfigurationOrganization(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentSettingOrganization], *errorWithStatus) {
+ org, err := u.Organization().One(ctx, db.PGInstance.BobDB)
+ if err != nil {
+ return nil, newError("get organization: %w", err)
+ }
+ /*
+ var district contentDistrict
+ district, err = bob.One[contentDistrict](ctx, db.PGInstance.BobDB, psql.Select(
+ sm.From("import.district"),
+ sm.Columns(
+ "address",
+ "agency",
+ "area_4326_sqm",
+ "city1",
+ "city2",
+ "contact",
+ "fax1",
+ "general_mg",
+ "gid",
+ "phone1",
+ "phone2",
+ "postal_c_1",
+ "website",
+ psql.F("ST_AsGeoJSON", "centroid_4326"),
+ psql.F("ST_XMin", "extent_4326"),
+ psql.F("ST_YMin", "extent_4326"),
+ psql.F("ST_XMax", "extent_4326"),
+ psql.F("ST_YMax", "extent_4326"),
+ ),
+ sm.Where(psql.Quote("gid").EQ(psql.Arg(gid))),
+ ), scan.StructMapper[contentDistrict]())
+ if err != nil {
+ respondError(w, "Failed to get extents", err, http.StatusInternalServerError)
+ return
+ }
+ */
+ data := contentSettingOrganization{
+ Organization: org,
+ }
+ return newResponse("sync/configuration/organization.html", data), nil
+}
+func getConfigurationIntegration(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentSettingIntegration], *errorWithStatus) {
+ oauth, err := arcgis.GetOAuthForUser(ctx, u)
+ if err != nil {
+ return nil, newError("Failed to get oauth: %w", err)
+ }
+ data := contentSettingIntegration{
+ ArcGISOAuth: oauth,
+ }
+ return newResponse("sync/configuration/integration.html", data), nil
+}
+func getConfigurationIntegrationArcgis(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentSettingIntegration], *errorWithStatus) {
+ oauth, err := arcgis.GetOAuthForUser(ctx, u)
+ if err != nil {
+ return nil, newError("Failed to get oauth: %w", err)
+ }
+ data := contentSettingIntegration{
+ ArcGISOAuth: oauth,
+ }
+ return newResponse("sync/configuration/integration-arcgis.html", data), nil
+}
+
+type contentSettingPlaceholder struct{}
+
+func getConfigurationPesticide(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
+ content := contentSettingPlaceholder{}
+ return newResponse("sync/configuration/pesticide.html", content), nil
+}
+func getConfigurationPesticideAdd(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
+ content := contentSettingPlaceholder{}
+ return newResponse("sync/configuration/pesticide-add.html", content), nil
+}
+func getConfigurationUserAdd(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
+ content := contentSettingPlaceholder{}
+ return newResponse("sync/configuration/user-add.html", content), nil
+}
+func getConfigurationUserList(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
+ content := contentSettingPlaceholder{}
+ return newResponse("sync/configuration/user-list.html", content), nil
+}
diff --git a/sync/intelligence.go b/sync/intelligence.go
new file mode 100644
index 00000000..b8c1037c
--- /dev/null
+++ b/sync/intelligence.go
@@ -0,0 +1,14 @@
+package sync
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/Gleipnir-Technology/nidus-sync/db/models"
+)
+
+type contentIntelligenceRoot struct{}
+
+func getIntelligenceRoot(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentIntelligenceRoot], *errorWithStatus) {
+ return newResponse("sync/intelligence-root.html", contentIntelligenceRoot{}), nil
+}
diff --git a/sync/operations.go b/sync/operations.go
new file mode 100644
index 00000000..1930a6cb
--- /dev/null
+++ b/sync/operations.go
@@ -0,0 +1,14 @@
+package sync
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/Gleipnir-Technology/nidus-sync/db/models"
+)
+
+type contentOperationsRoot struct{}
+
+func getOperationsRoot(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentOperationsRoot], *errorWithStatus) {
+ return newResponse("sync/operations-root.html", contentOperationsRoot{}), nil
+}
diff --git a/sync/review.go b/sync/review.go
new file mode 100644
index 00000000..996cbeca
--- /dev/null
+++ b/sync/review.go
@@ -0,0 +1,14 @@
+package sync
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/Gleipnir-Technology/nidus-sync/db/models"
+)
+
+type contentReviewRoot struct{}
+
+func getReviewRoot(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentReviewRoot], *errorWithStatus) {
+ return newResponse("sync/review-root.html", contentReviewRoot{}), nil
+}
diff --git a/sync/routes.go b/sync/routes.go
index d38df682..5d40a382 100644
--- a/sync/routes.go
+++ b/sync/routes.go
@@ -48,25 +48,34 @@ func Router() chi.Router {
r.Route("/api", api.AddRoutes)
r.Method("GET", "/admin", authenticatedHandler(getAdminDash))
r.Method("GET", "/cell/{cell}", authenticatedHandler(getCellDetails))
+ r.Method("GET", "/communication", authenticatedHandler(getCommunicationRoot))
+ r.Method("GET", "/configuration", authenticatedHandler(getConfigurationRoot))
+ r.Method("GET", "/configuration/upload", authenticatedHandler(getUploadList))
+ r.Method("GET", "/configuration/upload/pool", authenticatedHandler(getUploadPoolCreate))
+ r.Method("POST", "/configuration/upload/pool", authenticatedHandlerPostMultipart(postUploadPoolCreate))
+ r.Method("GET", "/configuration/upload/{id}", authenticatedHandler(getUploadByID))
+ r.Method("POST", "/configuration/upload/{id}/discard", authenticatedHandlerPost(postUploadDiscard))
r.Method("GET", "/download", authenticatedHandler(getDownloadList))
+ r.Method("GET", "/intelligence", authenticatedHandler(getIntelligenceRoot))
r.Method("GET", "/layout-test", authenticatedHandler(getLayoutTest))
r.Method("GET", "/message", authenticatedHandler(getMessageList))
r.Method("GET", "/notification", authenticatedHandler(getNotificationList))
+ r.Method("GET", "/operations", authenticatedHandler(getOperationsRoot))
r.Method("GET", "/planning", authenticatedHandler(getPlanningRoot))
r.Method("GET", "/pool", authenticatedHandler(getPoolList))
r.Method("GET", "/pool/create", authenticatedHandler(getPoolCreate))
r.Method("GET", "/pool/{id}", authenticatedHandler(getPoolByID))
r.Method("GET", "/radar", authenticatedHandler(getRadar))
+ r.Method("GET", "/review", authenticatedHandler(getReviewRoot))
r.Method("GET", "/service-request", authenticatedHandler(getServiceRequestList))
r.Method("GET", "/service-request/{id}", authenticatedHandler(getServiceRequestDetail))
- r.Method("GET", "/setting", authenticatedHandler(getSetting))
- r.Method("GET", "/setting/integration", authenticatedHandler(getSettingIntegration))
- r.Method("GET", "/setting/integration/arcgis", authenticatedHandler(getSettingIntegrationArcgis))
- r.Method("GET", "/setting/organization", authenticatedHandler(getSettingOrganization))
- r.Method("GET", "/setting/pesticide", authenticatedHandler(getSettingPesticide))
- r.Method("GET", "/setting/pesticide/add", authenticatedHandler(getSettingPesticideAdd))
- r.Method("GET", "/setting/user", authenticatedHandler(getSettingUserList))
- r.Method("GET", "/setting/user/add", authenticatedHandler(getSettingUserAdd))
+ r.Method("GET", "/configuration/integration", authenticatedHandler(getConfigurationIntegration))
+ r.Method("GET", "/configuration/integration/arcgis", authenticatedHandler(getConfigurationIntegrationArcgis))
+ r.Method("GET", "/configuration/organization", authenticatedHandler(getConfigurationOrganization))
+ r.Method("GET", "/configuration/pesticide", authenticatedHandler(getConfigurationPesticide))
+ r.Method("GET", "/configuration/pesticide/add", authenticatedHandler(getConfigurationPesticideAdd))
+ r.Method("GET", "/configuration/user", authenticatedHandler(getConfigurationUserList))
+ r.Method("GET", "/configuration/user/add", authenticatedHandler(getConfigurationUserAdd))
r.Method("GET", "/signout", auth.NewEnsureAuth(getSignout))
r.Method("GET", "/source/{globalid}", authenticatedHandler(getSource))
r.Method("GET", "/stadia", authenticatedHandler(getStadia))
@@ -75,11 +84,6 @@ func Router() chi.Router {
r.Method("POST", "/sudo/sms", authenticatedHandlerPost(postSudoSMS))
r.Method("GET", "/trap/{globalid}", authenticatedHandler(getTrap))
r.Method("GET", "/text/{destination}", authenticatedHandler(getTextMessages))
- r.Method("GET", "/upload", authenticatedHandler(getUploadList))
- r.Method("GET", "/upload/pool", authenticatedHandler(getUploadPoolCreate))
- r.Method("POST", "/upload/pool", authenticatedHandlerPostMultipart(postUploadPoolCreate))
- r.Method("GET", "/upload/{id}", authenticatedHandler(getUploadByID))
- r.Method("POST", "/upload/{id}/discard", authenticatedHandlerPost(postUploadDiscard))
html.AddStaticRoute(r, "/static")
return r
diff --git a/sync/setting.go b/sync/setting.go
index 5584fb2f..0bf471b0 100644
--- a/sync/setting.go
+++ b/sync/setting.go
@@ -1,107 +1,3 @@
package sync
-import (
- "context"
- "net/http"
-
- "github.com/Gleipnir-Technology/nidus-sync/arcgis"
- "github.com/Gleipnir-Technology/nidus-sync/db"
- "github.com/Gleipnir-Technology/nidus-sync/db/models"
- //"github.com/rs/zerolog/log"
-)
-
-type contentSettingOrganization struct {
- Organization *models.Organization
-}
-
-type contentSettingIntegration struct {
- ArcGISOAuth *models.OauthToken
-}
-
-type contentAuthenticatedPlaceholder struct {
-}
-
-func getSetting(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentAuthenticatedPlaceholder], *errorWithStatus) {
- data := contentAuthenticatedPlaceholder{}
- return newResponse("sync/settings.html", data), nil
-}
-func getSettingOrganization(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentSettingOrganization], *errorWithStatus) {
- org, err := u.Organization().One(ctx, db.PGInstance.BobDB)
- if err != nil {
- return nil, newError("get organization: %w", err)
- }
- /*
- var district contentDistrict
- district, err = bob.One[contentDistrict](ctx, db.PGInstance.BobDB, psql.Select(
- sm.From("import.district"),
- sm.Columns(
- "address",
- "agency",
- "area_4326_sqm",
- "city1",
- "city2",
- "contact",
- "fax1",
- "general_mg",
- "gid",
- "phone1",
- "phone2",
- "postal_c_1",
- "website",
- psql.F("ST_AsGeoJSON", "centroid_4326"),
- psql.F("ST_XMin", "extent_4326"),
- psql.F("ST_YMin", "extent_4326"),
- psql.F("ST_XMax", "extent_4326"),
- psql.F("ST_YMax", "extent_4326"),
- ),
- sm.Where(psql.Quote("gid").EQ(psql.Arg(gid))),
- ), scan.StructMapper[contentDistrict]())
- if err != nil {
- respondError(w, "Failed to get extents", err, http.StatusInternalServerError)
- return
- }
- */
- data := contentSettingOrganization{
- Organization: org,
- }
- return newResponse("sync/setting-organization.html", data), nil
-}
-func getSettingIntegration(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentSettingIntegration], *errorWithStatus) {
- oauth, err := arcgis.GetOAuthForUser(ctx, u)
- if err != nil {
- return nil, newError("Failed to get oauth: %w", err)
- }
- data := contentSettingIntegration{
- ArcGISOAuth: oauth,
- }
- return newResponse("sync/setting-integration.html", data), nil
-}
-func getSettingIntegrationArcgis(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentSettingIntegration], *errorWithStatus) {
- oauth, err := arcgis.GetOAuthForUser(ctx, u)
- if err != nil {
- return nil, newError("Failed to get oauth: %w", err)
- }
- data := contentSettingIntegration{
- ArcGISOAuth: oauth,
- }
- return newResponse("sync/setting-integration-arcgis.html", data), nil
-}
-
-type contentSettingPlaceholder struct{}
-
-func getSettingPesticide(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
- content := contentSettingPlaceholder{}
- return newResponse("sync/setting-pesticide.html", content), nil
-}
-func getSettingPesticideAdd(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
- content := contentSettingPlaceholder{}
- return newResponse("sync/setting-pesticide-add.html", content), nil
-}
-func getSettingUserAdd(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
- content := contentSettingPlaceholder{}
- return newResponse("sync/setting-user-add.html", content), nil
-}
-func getSettingUserList(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentSettingPlaceholder], *errorWithStatus) {
- content := contentSettingPlaceholder{}
- return newResponse("sync/setting-user-list.html", content), nil
-}
+import ()
diff --git a/sync/url.go b/sync/url.go
index e3641d61..c2f49a51 100644
--- a/sync/url.go
+++ b/sync/url.go
@@ -5,6 +5,7 @@ import (
)
type contentURL struct {
+ Configuration contentURLConfiguration
OAuthRefreshArcGIS string
Root string
Route string
@@ -17,6 +18,7 @@ type contentURL struct {
func newContentURL() contentURL {
return contentURL{
+ Configuration: newContentURLConfiguration(),
OAuthRefreshArcGIS: config.MakeURLNidus("/arcgis/oauth/begin"),
Root: config.MakeURLNidus("/"),
Route: config.MakeURLNidus("/route"),
@@ -28,6 +30,16 @@ func newContentURL() contentURL {
}
}
+type contentURLConfiguration struct {
+ Upload string
+}
+
+func newContentURLConfiguration() contentURLConfiguration {
+ return contentURLConfiguration{
+ Upload: config.MakeURLNidus("/configuration/upload"),
+ }
+}
+
type contentURLSidebar struct {
Communication string
Configuration string