diff --git a/cmd/xcontrol-server/main.go b/cmd/xcontrol-server/main.go index 325774b..edf2b8b 100644 --- a/cmd/xcontrol-server/main.go +++ b/cmd/xcontrol-server/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "database/sql" "errors" "log/slog" "net/http" @@ -11,6 +12,8 @@ import ( "github.com/jackc/pgx/v5" "github.com/redis/go-redis/v9" "github.com/spf13/cobra" + "gorm.io/driver/postgres" + "gorm.io/gorm" rconfig "xcontrol/internal/rag/config" "xcontrol/server" @@ -54,8 +57,13 @@ var rootCmd = &cobra.Command{ logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level})) slog.SetDefault(logger) - var conn *pgx.Conn - if dsn := cfg.Global.VectorDB.DSN(); dsn != "" { + api.ConfigureServiceDB(nil) + dsn := cfg.Global.VectorDB.DSN() + var ( + conn *pgx.Conn + sqlDB *sql.DB + ) + if dsn != "" { logger.Debug("connecting to postgres", "dsn", dsn) conn, err = pgx.Connect(context.Background(), dsn) if err != nil { @@ -63,10 +71,29 @@ var rootCmd = &cobra.Command{ } else { logger.Info("postgres connected") } + + gormDB, gormErr := gorm.Open(postgres.Open(dsn), &gorm.Config{}) + if gormErr != nil { + logger.Error("gorm postgres connect error", "err", gormErr) + } else { + api.ConfigureServiceDB(gormDB) + sqlDB, err = gormDB.DB() + if err != nil { + logger.Error("postgres db handle error", "err", err) + } + } } else { logger.Warn("postgres dsn not provided") } + if sqlDB != nil { + defer func() { + if cerr := sqlDB.Close(); cerr != nil { + logger.Error("close postgres db", "err", cerr) + } + }() + } + if addr := cfg.Global.Redis.Addr; addr != "" { logger.Debug("connecting to redis", "addr", addr) rdb := redis.NewClient(&redis.Options{ diff --git a/server/api/config.go b/server/api/config.go new file mode 100644 index 0000000..84eed9d --- /dev/null +++ b/server/api/config.go @@ -0,0 +1,12 @@ +package api + +import ( + "gorm.io/gorm" + + "xcontrol/server/internal/service" +) + +// ConfigureServiceDB configures the internal service database connection. +func ConfigureServiceDB(db *gorm.DB) { + service.SetDB(db) +}