MarketingSystemDataExportTool/server/cmd/server/main.go

77 lines
2.5 KiB
Go

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()