package server import ( "context" "net/http" "time" "github.com/davidbyttow/govips/v2/vips" log "github.com/sirupsen/logrus" "reichard.io/imagini/internal/api" "reichard.io/imagini/internal/auth" "reichard.io/imagini/internal/config" "reichard.io/imagini/internal/db" ) type Server struct { API *api.API Auth *auth.AuthManager Config *config.Config Database *db.DBManager httpServer *http.Server } func NewServer() *Server { c := config.Load() db := db.NewMgr(c) auth := auth.NewMgr(db, c) api := api.NewApi(db, c, auth) return &Server{ API: api, Auth: auth, Config: c, Database: db, } } func (s *Server) StartServer() { listenAddr := (":" + s.Config.ListenPort) s.httpServer = &http.Server{ Handler: s.API.Router, Addr: listenAddr, } go func() { vips.Startup(nil) defer vips.Shutdown() err := s.httpServer.ListenAndServe() if err != nil { log.Error("Error starting server ", err) return } }() } func (s *Server) StopServer() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() s.httpServer.Shutdown(ctx) }