dbots/internal/server/server.go
2026-04-17 22:05:05 +02:00

55 lines
1.2 KiB
Go

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, logger *slog.Logger) *Server {
router := chi.NewMux()
router.Use(httplog.RequestLogger(logger, nil))
router.Use(middleware.Recoverer)
router.Use(middleware.RequestID)
router.Use(middleware.RealIP)
router.Use(middleware.Recoverer)
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)
}
}