feat: customer relationship view, idempotency keys, approval decline, seed payments, backlog cleanup
- #3: Wire ApprovalModal handleDecline to POST /api/admin/bookings/{id}/cancel - #25: New GET /api/admin/users/{id}/relationship endpoint with spend, tips, visits, customer-for duration, top services - #25: UserModal reorganized — Personal Info, Booking History, Customer Relationship, Loyalty, Patch Tests - #36: Idempotency keys on user and admin booking creation (UUID header, duplicate detection) - local-dev-2.sh: seed payments via PL/pgSQL for completed bookings (5 randomized scenarios) - local-dev-2.sh: shrink guest/time-blocker output, add payments to summary - Backlog: mark #3/#25/#35/#36/#49 done, plan #36/#45, remove #46/#48, update #45 with milestone campaigns - Remove notes history table, avg visits/year metric, Account Information, Privacy & Consent from UserModal
This commit is contained in:
+7
-6
@@ -246,12 +246,13 @@ func main() {
|
||||
r.Post("/{id}/edit-requests/{request_id}/deny", bookings.AdminRejectEditRequestHandler)
|
||||
})
|
||||
|
||||
r.Route("/admin/users", func(r chi.Router) {
|
||||
r.Get("/", user.ListAdminUsersHandler)
|
||||
r.Get("/{id}", user.GetAdminUserHandler)
|
||||
r.Get("/{id}/patch-tests/eligible", user.GetEligiblePatchTestServicesHandler)
|
||||
r.Post("/{id}/patch-tests", user.AddPatchTestHandler)
|
||||
})
|
||||
r.Route("/admin/users", func(r chi.Router) {
|
||||
r.Get("/", user.ListAdminUsersHandler)
|
||||
r.Get("/{id}", user.GetAdminUserHandler)
|
||||
r.Get("/{id}/relationship", user.GetCustomerRelationshipHandler)
|
||||
r.Get("/{id}/patch-tests/eligible", user.GetEligiblePatchTestServicesHandler)
|
||||
r.Post("/{id}/patch-tests", user.AddPatchTestHandler)
|
||||
})
|
||||
|
||||
r.Route("/admin/today", func(r chi.Router) {
|
||||
r.Get("/current-next", today.GetCurrentAndNextHandler)
|
||||
|
||||
Reference in New Issue
Block a user