2025-04-07 19:28:20 +02:00

56 lines
1.1 KiB
Go

package server
import (
"context"
"html/template"
"net/http"
"git.mziesel.nl/mans/zadmin/internal/database"
"git.mziesel.nl/mans/zadmin/internal/logger"
"github.com/nats-io/nats.go"
)
type Server struct {
Router *http.ServeMux
DB *database.Database
NATS *nats.Conn
Logger *logger.ConsoleLogger
Templates *template.Template
httpServer *http.Server
}
func NewServer(db *database.Database, nats *nats.Conn, logger *logger.ConsoleLogger) *Server {
router := http.NewServeMux()
templates, err := template.ParseGlob("templates/*.html")
if err != nil {
logger.Fatal(err)
}
s := &Server{
Router: router,
DB: db,
NATS: nats,
Logger: logger,
Templates: templates,
httpServer: &http.Server{
Addr: ":8080",
Handler: router,
},
}
s.registerNatsHandlers()
s.registerHttpRoutes()
return s
}
func (s *Server) Start(addr string) error {
s.Logger.Info("Starting server on ", addr)
return http.ListenAndServe(addr, s.Router)
}
func (s *Server) Shutdown(ctx context.Context) error {
s.Logger.Info("Shutting down server...")
return s.httpServer.Shutdown(ctx)
}