package server import ( "fmt" "os" "strconv" "time" "music-server/internal/db" "music-server/internal/logging" "net/http" "go.uber.org/zap" ) type Server struct { port int tokenHandler *TokenHandler } var ( host = os.Getenv("DB_HOST") dbPort = os.Getenv("DB_PORT") dbName = os.Getenv("DB_NAME") username = os.Getenv("DB_USERNAME") password = os.Getenv("DB_PASSWORD") musicPath = os.Getenv("MUSIC_PATH") charactersPath = os.Getenv("CHARACTERS_PATH") logLevel = os.Getenv("LOG_LEVEL") logJSON = os.Getenv("LOG_JSON") == "true" ) func NewServer() *http.Server { // Initialize logger if logLevel == "" { logLevel = "info" } logging.Init(logLevel, logJSON) logger := logging.GetLogger() port, _ := strconv.Atoi(os.Getenv("PORT")) // Initialize token handler tokenHandler := NewTokenHandler() NewServer := &Server{ port: port, tokenHandler: tokenHandler, } logger.Info("Starting server", zap.String("host", host), zap.String("dbPort", dbPort), zap.String("username", username), zap.String("dbName", dbName), ) logger.Info("Paths", zap.String("musicPath", musicPath), zap.String("charactersPath", charactersPath), ) //conf.SetupDb() if host == "" || dbPort == "" || username == "" || password == "" || dbName == "" || musicPath == "" || charactersPath == "" { logging.GetLogger().Fatal("Invalid settings - missing required environment variables") } db.Migrate_db(host, dbPort, username, password, dbName) db.InitDB(host, dbPort, username, password, dbName) // Declare Server config server := &http.Server{ Addr: fmt.Sprintf(":%d", NewServer.port), Handler: NewServer.RegisterRoutes(), IdleTimeout: time.Minute, ReadTimeout: 10 * time.Second, WriteTimeout: 30 * time.Second, } return server }