// Path: Backend/internal/httpx/api_routes.go package httpx import ( "net/http" "github.com/go-chi/chi/v5" ) type apiRoutes struct { cfg RouterConfig } func newAPIRoutes(cfg RouterConfig) routeRegistrar { return apiRoutes{cfg: cfg} } func (routes apiRoutes) Register(router chi.Router) { router.Route("/v1", func(apiRouter chi.Router) { apiRouter.Get("/", routes.handleIndex) apiRouter.Get("/bootstrap", routes.handleBootstrapOverview) apiRouter.Get("/bootstrap/installation", routes.handleBootstrapInstallation) apiRouter.Get("/bootstrap/admin", routes.handleBootstrapAdmin) apiRouter.Get("/bootstrap/structure", routes.handleBootstrapStructure) apiRouter.Get("/bootstrap/state", routes.handleBootstrapState) apiRouter.Route("/bootstrap/steps", func(bootstrapRouter chi.Router) { bootstrapRouter.Post("/instance", routes.handleBootstrapInstanceStep) bootstrapRouter.Post("/mode", routes.handleBootstrapModeStep) bootstrapRouter.Post("/admin", routes.handleBootstrapAdminStep) bootstrapRouter.Post("/structure", routes.handleBootstrapStructureStep) }) apiRouter.Get("/app-shell", routes.handleAppShellState) apiRouter.Put("/settings/theme", routes.handleSaveThemePreset) apiRouter.Get("/organizations", routes.handleOrganizations) apiRouter.Get("/workspaces", routes.handleWorkspaces) apiRouter.Route("/projects/{projectId}", func(projectRouter chi.Router) { projectRouter.Get("/folders", routes.handleProjectFolders) projectRouter.Post("/folders", routes.handleCreateProjectFolder) projectRouter.Patch("/folders", routes.handleRenameProjectFolder) projectRouter.Patch("/folders/move", routes.handleMoveProjectFolder) projectRouter.Delete("/folders", routes.handleDeleteProjectFolder) projectRouter.Get("/tree", routes.handleProjectTree) projectRouter.Get("/tree/folders", routes.handleProjectTreeFolders) projectRouter.Post("/tree/folders", routes.handleCreateProjectTreeFolder) projectRouter.Patch("/tree/folders", routes.handleRenameProjectTreeFolder) projectRouter.Patch("/tree/folders/move", routes.handleMoveProjectTreeFolder) projectRouter.Delete("/tree/folders", routes.handleDeleteProjectTreeFolder) projectRouter.Post("/tree/items", routes.handleCreateProjectTreeItem) projectRouter.Patch("/tree/items/move", routes.handleMoveProjectTreeItem) projectRouter.Delete("/tree/items", routes.handleDeleteProjectTreeItem) }) if routes.cfg.Config.IsDevelopment() { apiRouter.Post("/dev/bootstrap/reset", routes.handleDevelopmentBootstrapReset) } }) } func (routes apiRoutes) handleIndex(w http.ResponseWriter, _ *http.Request) { WriteJSON(w, http.StatusOK, map[string]any{ "service": routes.cfg.ServiceName, "version": "v1", "status": "scaffolded", }) } func (routes apiRoutes) handleOrganizations(w http.ResponseWriter, _ *http.Request) { WriteJSON(w, http.StatusOK, map[string]any{ "data": []any{}, "meta": map[string]any{ "resource": "organizations", "count": 0, }, }) } func (routes apiRoutes) handleWorkspaces(w http.ResponseWriter, _ *http.Request) { WriteJSON(w, http.StatusOK, map[string]any{ "data": []any{}, "meta": map[string]any{ "resource": "workspaces", "count": 0, }, }) }