package apiserver import ( "net/http" authmiddleware "git.maronato.dev/maronato/goshort/internal/server/middleware/auth" "github.com/go-chi/chi/v5" ) func NewAPIRouter(handler *APIHandler) http.Handler { mux := chi.NewRouter() // Auth routes mux.Post("/login", handler.Login) mux.Post("/logout", handler.Logout) mux.Post("/signup", handler.Signup) // Public routes mux.Get("/config", handler.PublicConfig) // Authenticated routes mux.Group(func(r chi.Router) { // UI and API endpoints r.Group(func(r chi.Router) { r.Use(authmiddleware.AuthRequired(authmiddleware.TokenAuth, authmiddleware.SessionAuth)) // "Me" routes r.Get("/me", handler.Me) // Shorts routes r.Get("/shorts", handler.ListShorts) r.Post("/shorts", handler.CreateShort) r.Get("/shorts/{id}", handler.FindShort) r.Delete("/shorts/{id}", handler.DeleteShort) r.Get("/shorts/{id}/logs", handler.ListShortLogs) }) // UI-only endpoints r.Group(func(r chi.Router) { r.Use(authmiddleware.AuthRequired(authmiddleware.SessionAuth)) // "Me" routes r.Delete("/me", handler.DeleteMe) // Sessions routes r.Get("/sessions", handler.ListSessions) r.Delete("/sessions/{id}", handler.DeleteSession) // Tokens routes r.Get("/tokens", handler.ListTokens) r.Post("/tokens", handler.CreateToken) r.Patch("/tokens/{id}", handler.ChangeTokenName) r.Delete("/tokens/{id}", handler.DeleteToken) }) }) return mux }