package main import ( "database/sql" "log" "net/http" "os" "server/internal/api" "server/internal/config" "server/internal/db" "server/internal/logging" "time" ) func main() { cfg := config.Load() if cfg.YMTKeyDecryptKeyB64 != "" { os.Setenv("YMT_KEY_DECRYPT_KEY_B64", cfg.YMTKeyDecryptKeyB64) } _ = logging.Init("log") log.Println("connecting YMT MySQL:", cfg.YMTDB.Host+":"+cfg.YMTDB.Port, "db", cfg.YMTDB.Name, "user", cfg.YMTDB.User) log.Println("connecting Marketing MySQL:", cfg.MarketingDB.Host+":"+cfg.MarketingDB.Port, "db", cfg.MarketingDB.Name, "user", cfg.MarketingDB.User) log.Println("connecting Meta MySQL (templates/jobs):", cfg.YMTTestDB.Host+":"+cfg.YMTTestDB.Port, "db", cfg.YMTTestDB.Name, "user", cfg.YMTTestDB.User) if cfg.YMTDB.DSN() == "" { log.Fatal("YMT MySQL DSN missing: host, port, user, name required") } if cfg.MarketingDB.DSN() == "" { log.Fatal("Marketing MySQL DSN missing: host, port, user, name required") } if cfg.YMTTestDB.DSN() == "" { log.Fatal("Meta MySQL DSN missing: host, port, user, name required") } ymt, err := db.ConnectMySQL(cfg.YMTDB.DSN()) if err != nil { log.Fatal(err) } // apply pool settings from env for YMT db.ApplyPoolFromEnv(ymt, "YMT_DB_") marketing, err := db.ConnectMySQL(cfg.MarketingDB.DSN()) if err != nil { log.Fatal(err) } // apply pool settings from env for Marketing db.ApplyPoolFromEnv(marketing, "MARKETING_DB_") // Marketing Authorization DB for creators var marketingAuth *sql.DB if cfg.MarketingAuthorizationDB.DSN() != "" { marketingAuth, err = db.ConnectMySQL(cfg.MarketingAuthorizationDB.DSN()) if err != nil { log.Fatal(err) } db.ApplyPoolFromEnv(marketingAuth, "MARKETING_AUTH_DB_") log.Println("connecting Marketing Authorization MySQL:", cfg.MarketingAuthorizationDB.Host+":"+cfg.MarketingAuthorizationDB.Port, "db", cfg.MarketingAuthorizationDB.Name) } else { marketingAuth = marketing // fallback } meta, err := db.ConnectMySQL(cfg.YMTTestDB.DSN()) if err != nil { log.Fatal(err) } // apply pool settings from env for Meta (templates/jobs) db.ApplyPoolFromEnv(meta, "YMT_TEST_DB_") r := api.NewRouter(meta, marketing, marketingAuth, ymt) addr := ":" + func() string { s := cfg.Port if s == "" { return "8077" } return s }() srv := &http.Server{Addr: addr, Handler: r, ReadTimeout: 15 * time.Second, WriteTimeout: 60 * time.Second} log.Println("server listening on ", addr) log.Fatal(srv.ListenAndServe()) } // buildDSN deprecated; use cfg.YMTDB.DSN()/cfg.MarketingDB.DSN()