package admin import ( "database/sql" "github.com/go-chi/chi/v5" "atmoquest/features/auth" "atmoquest/internal/admincrypto" ) // SetupRoutes wires the admin feature's routes behind RequireAdmin. // // - GET /admin — dashboard stats // - GET /admin/users — user list (?q=, ?admins=, ?page=) // - POST /admin/users/{did}/promote — toggle is_admin // - GET /admin/events — event list // - GET /admin/events/new — new-event form // - POST /admin/events — create event + redirect to badge designer // - GET /admin/events/{token}/badge — badge designer // - POST /admin/events/{token}/badge — save badge design (signed) // - POST /admin/events/delete — delete event by URI (hidden form field) // - GET /admin/follow-ups — list users who requested follow-up // - GET /admin/follow-ups/csv — download follow-ups as CSV func SetupRoutes(router chi.Router, conn *sql.DB, authH *auth.Handlers, signer *admincrypto.Signer) { h := NewHandlers(conn, authH, signer) router.Route("/admin", func(r chi.Router) { r.Use(h.RequireAdmin) r.Get("/", h.AdminDashboard) r.Get("/users", h.AdminUsers) r.Post("/users/{did}/promote", h.AdminUsersPromote) r.Get("/events", h.AdminEvents) r.Get("/events/new", h.AdminEventNew) r.Post("/events", h.AdminEventCreate) r.Get("/events/{token}/edit", h.AdminEventEditPage) r.Post("/events/{token}/edit", h.AdminEventEditSave) r.Get("/events/{token}/badge", h.AdminEventBadge) r.Post("/events/{token}/badge", h.AdminEventBadgeSave) r.Get("/badge-preview.svg", h.BadgePreviewSVG) r.Post("/events/{token}/finalize", h.AdminEventFinalize) r.Post("/events/delete", h.AdminEventDelete) r.Get("/badges", h.AdminBadges) r.Get("/badges/{id}/edit", h.AdminBadgeEditPage) r.Post("/badges/{id}/edit", h.AdminBadgeEditSave) r.Get("/follow-ups", h.AdminFollowUps) r.Get("/follow-ups/csv", h.AdminFollowUpsCSV) }) }