56 lines
1.1 KiB
Go
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)
|
|
}
|