From 99b75a731b28d2aa3aa8eb5c70975bee3be3069c Mon Sep 17 00:00:00 2001 From: Sergey Chubaryan Date: Sun, 25 Aug 2024 11:59:41 +0300 Subject: [PATCH] moved postgres init to integrations --- src/app.go | 71 +++++++++++++++------------------- src/integrations/postgresql.go | 25 ++++++++++++ 2 files changed, 56 insertions(+), 40 deletions(-) create mode 100644 src/integrations/postgresql.go diff --git a/src/app.go b/src/app.go index 543922e..cda51d0 100644 --- a/src/app.go +++ b/src/app.go @@ -8,12 +8,12 @@ import ( "backend/src/core/repos" "backend/src/core/services" "backend/src/core/utils" + "backend/src/integrations" "backend/src/logger" "backend/src/server" "context" "crypto/rsa" "crypto/x509" - "database/sql" "encoding/pem" "log" "os" @@ -21,9 +21,6 @@ import ( "runtime/pprof" "syscall" "time" - - "github.com/jackc/pgx" - "github.com/jackc/pgx/stdlib" ) type App struct{} @@ -42,31 +39,6 @@ func (a *App) Run(p RunParams) { debugMode = false // TODO: replace with flag from conf ) - //----------------------------------------- - - args, err := args_parser.Parse(osArgs) - if err != nil { - log.Fatalf("failed to parse os args: %v\n", err) - } - - logger, err := logger.New(logger.NewLoggerOpts{ - Debug: debugMode, - OutputFile: args.GetLogPath(), - }) - if err != nil { - log.Fatalf("failed to create logger object: %v\n", err) - } - - conf, err := config.NewFromFile(args.GetConfigPath()) - if err != nil { - logger.Fatal().Err(err).Msg("failed to parse config file") - } - - //----------------------------------------- - - logger.Log().Msg("initializing service...") - defer logger.Log().Msg("service stopped") - signals := []os.Signal{ os.Kill, os.Interrupt, @@ -82,18 +54,37 @@ func (a *App) Run(p RunParams) { ctx, stop := signal.NotifyContext(ctx, signals...) defer stop() - var sqlDb *sql.DB // TODO: move to integrations package - { - pgConnStr := conf.GetPostgresUrl() - connConf, err := pgx.ParseConnectionString(pgConnStr) - if err != nil { - logger.Fatal().Err(err).Msg("failed parsing postgres connection string") - } + //----------------------------------------- - sqlDb = stdlib.OpenDB(connConf) - if err := sqlDb.Ping(); err != nil { - logger.Fatal().Err(err).Msg("failed pinging postgres db") - } + args, err := args_parser.Parse(osArgs) + if err != nil { + log.Fatalf("failed to parse os args: %v\n", err) + } + + logger, err := logger.New( + ctx, + logger.NewLoggerOpts{ + Debug: debugMode, + OutputFile: args.GetLogPath(), + }, + ) + if err != nil { + log.Fatalf("failed to create logger object: %v\n", err) + } + + conf, err := config.NewFromFile(args.GetConfigPath()) + if err != nil { + logger.Fatal().Err(err).Msg("failed to parse config file") + } + + //----------------------------------------- + + logger.Log().Msg("initializing service...") + defer logger.Log().Msg("service stopped") + + sqlDb, err := integrations.NewPostgresConn(ctx, conf.GetPostgresUrl()) + if err != nil { + logger.Fatal().Err(err).Msg("failed connecting to postgres") } var key *rsa.PrivateKey diff --git a/src/integrations/postgresql.go b/src/integrations/postgresql.go new file mode 100644 index 0000000..de727f3 --- /dev/null +++ b/src/integrations/postgresql.go @@ -0,0 +1,25 @@ +package integrations + +import ( + "context" + "database/sql" + "fmt" + + "github.com/jackc/pgx" + "github.com/jackc/pgx/stdlib" +) + +// TODO: wrapper, connection pool +func NewPostgresConn(ctx context.Context, connUrl string) (*sql.DB, error) { + connConf, err := pgx.ParseConnectionString(connUrl) + if err != nil { + return nil, fmt.Errorf("failed parsing postgres connection string: %v", err) + } + + sqlDb := stdlib.OpenDB(connConf) + if err := sqlDb.PingContext(ctx); err != nil { + return nil, fmt.Errorf("failed pinging postgres db: %v", err) + } + + return sqlDb, nil +}