package admin import ( "github.com/go-chi/chi/v5" "ds2api/internal/chathistory" adminaccounts "ds2api/internal/httpapi/admin/accounts" adminauth "ds2api/internal/httpapi/admin/auth" adminconfig "ds2api/internal/httpapi/admin/configmgmt" admindevcapture "ds2api/internal/httpapi/admin/devcapture" adminhistory "ds2api/internal/httpapi/admin/history" adminproxies "ds2api/internal/httpapi/admin/proxies" adminrawsamples "ds2api/internal/httpapi/admin/rawsamples" adminsettings "ds2api/internal/httpapi/admin/settings" adminshared "ds2api/internal/httpapi/admin/shared" adminvercel "ds2api/internal/httpapi/admin/vercel" adminversion "ds2api/internal/httpapi/admin/version" ) type Handler struct { Store adminshared.ConfigStore Pool adminshared.PoolController DS adminshared.DeepSeekCaller OpenAI adminshared.OpenAIChatCaller ChatHistory *chathistory.Store } func RegisterRoutes(r chi.Router, h *Handler) { deps := adminsharedDeps(h) authHandler := &adminauth.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} accountsHandler := &adminaccounts.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} configHandler := &adminconfig.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} settingsHandler := &adminsettings.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} proxiesHandler := &adminproxies.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} rawSamplesHandler := &adminrawsamples.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} vercelHandler := &adminvercel.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} historyHandler := &adminhistory.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} devCaptureHandler := &admindevcapture.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} versionHandler := &adminversion.Handler{Store: deps.Store, Pool: deps.Pool, DS: deps.DS, OpenAI: deps.OpenAI, ChatHistory: deps.ChatHistory} adminauth.RegisterPublicRoutes(r, authHandler) r.Group(func(pr chi.Router) { pr.Use(authHandler.RequireAdmin) adminauth.RegisterProtectedRoutes(pr, authHandler) adminconfig.RegisterRoutes(pr, configHandler) adminsettings.RegisterRoutes(pr, settingsHandler) adminproxies.RegisterRoutes(pr, proxiesHandler) adminaccounts.RegisterRoutes(pr, accountsHandler) adminrawsamples.RegisterRoutes(pr, rawSamplesHandler) adminvercel.RegisterRoutes(pr, vercelHandler) admindevcapture.RegisterRoutes(pr, devCaptureHandler) adminhistory.RegisterRoutes(pr, historyHandler) adminversion.RegisterRoutes(pr, versionHandler) }) } func adminsharedDeps(h *Handler) adminsharedDepsValue { if h == nil { return adminsharedDepsValue{} } return adminsharedDepsValue{Store: h.Store, Pool: h.Pool, DS: h.DS, OpenAI: h.OpenAI, ChatHistory: h.ChatHistory} } type adminsharedDepsValue struct { Store adminshared.ConfigStore Pool adminshared.PoolController DS adminshared.DeepSeekCaller OpenAI adminshared.OpenAIChatCaller ChatHistory *chathistory.Store }