// Package api provides the HTTP API for mosis-portal package api import ( "database/sql" "net/http" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/omixlab/mosis-portal/internal/api/handlers" "github.com/omixlab/mosis-portal/internal/config" ) // NewRouter creates and configures the HTTP router func NewRouter(cfg *config.Config, db *sql.DB) http.Handler { r := chi.NewRouter() // Middleware r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.RealIP) r.Use(middleware.RequestID) // Health check r.Get("/health", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("ok")) }) // API v1 r.Route("/v1", func(r chi.Router) { // Auth routes r.Route("/auth", func(r chi.Router) { r.Post("/oauth/github", handlers.NotImplemented) r.Get("/oauth/github/callback", handlers.NotImplemented) r.Post("/oauth/google", handlers.NotImplemented) r.Get("/oauth/google/callback", handlers.NotImplemented) r.Post("/refresh", handlers.NotImplemented) r.Post("/logout", handlers.NotImplemented) r.Get("/me", handlers.NotImplemented) }) // Developer apps r.Route("/apps", func(r chi.Router) { r.Get("/", handlers.NotImplemented) r.Post("/", handlers.NotImplemented) r.Get("/{appID}", handlers.NotImplemented) r.Patch("/{appID}", handlers.NotImplemented) r.Delete("/{appID}", handlers.NotImplemented) // Versions r.Route("/{appID}/versions", func(r chi.Router) { r.Get("/", handlers.NotImplemented) r.Post("/", handlers.NotImplemented) r.Get("/{versionID}", handlers.NotImplemented) r.Post("/{versionID}/submit", handlers.NotImplemented) r.Post("/{versionID}/publish", handlers.NotImplemented) }) }) // API Keys r.Route("/api-keys", func(r chi.Router) { r.Get("/", handlers.NotImplemented) r.Post("/", handlers.NotImplemented) r.Delete("/{keyID}", handlers.NotImplemented) }) // Signing Keys r.Route("/signing-keys", func(r chi.Router) { r.Get("/", handlers.NotImplemented) r.Post("/", handlers.NotImplemented) r.Delete("/{keyID}", handlers.NotImplemented) }) // Public store endpoints r.Route("/store", func(r chi.Router) { r.Get("/apps", handlers.NotImplemented) r.Get("/apps/{appID}", handlers.NotImplemented) r.Get("/apps/{appID}/download", handlers.NotImplemented) r.Get("/apps/updates", handlers.NotImplemented) }) // Telemetry r.Route("/telemetry", func(r chi.Router) { r.Post("/events", handlers.NotImplemented) r.Post("/crash", handlers.NotImplemented) }) }) // Admin routes (htmx UI) r.Route("/admin", func(r chi.Router) { r.Get("/", handlers.NotImplemented) r.Get("/review-queue", handlers.NotImplemented) r.Get("/review/{versionID}", handlers.NotImplemented) r.Post("/review/{versionID}/approve", handlers.NotImplemented) r.Post("/review/{versionID}/reject", handlers.NotImplemented) }) return r }