package server import ( "fmt" "log/slog" "net/http" "os" "codeberg.org/nextgo/dbots/internal/admin" "codeberg.org/nextgo/dbots/internal/bot" "codeberg.org/nextgo/dbots/internal/db" customMiddlewares "codeberg.org/nextgo/dbots/internal/middleware" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/go-chi/httplog/v3" ) type Server struct { router *chi.Mux queries *db.Queries } func NewServer(queries *db.Queries) *Server { router := chi.NewMux() router.Use(httplog.RequestLogger(slog.Default(), &httplog.Options{ RecoverPanics: true, })) router.Use(middleware.Recoverer) router.Use(middleware.RequestID) router.Use(middleware.RealIP) router.Use(customMiddlewares.AuthMiddleware(queries)) return &Server{ router: router, queries: queries, } } func (s *Server) Register() { botRouter := bot.NewRouter(s.queries) adminRouter := admin.NewRouter(s.queries) s.router.Mount("/bots", botRouter.Routes()) s.router.Mount("/admin", adminRouter.Routes()) } func (s *Server) Start(port int) { s.Register() slog.Info("server started", "port", port) if err := http.ListenAndServe(fmt.Sprintf(":%d", port), s.router); err != nil { slog.Error("error starting server", "port", port, "err", err) os.Exit(1) } }