github.com/pavlo67/common@v0.5.3/common/db/db_pg/starter.go (about) 1 package db_pg 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/pavlo67/common/common" 8 "github.com/pavlo67/common/common/config" 9 "github.com/pavlo67/common/common/errors" 10 "github.com/pavlo67/common/common/joiner" 11 "github.com/pavlo67/common/common/logger" 12 "github.com/pavlo67/common/common/sqllib/sqllib_pg" 13 "github.com/pavlo67/common/common/starter" 14 ) 15 16 const InterfaceKey joiner.InterfaceKey = "db_pg" 17 18 func Starter() starter.Operator { 19 return &connectPgStarter{} 20 } 21 22 var l logger.Operator 23 var _ starter.Operator = &connectPgStarter{} 24 25 type connectPgStarter struct { 26 cfgPg config.Access 27 28 interfaceKey joiner.InterfaceKey 29 } 30 31 func (cps *connectPgStarter) Name() string { 32 return logger.GetCallInfo().PackageName 33 } 34 35 func (cps *connectPgStarter) Run(cfg *config.Envs, options common.Map, joinerOp joiner.Operator, l_ logger.Operator) error { 36 l = l_ 37 38 if err := cfg.Value(options.StringDefault("db_key", "db_pg"), &cps.cfgPg); err != nil { 39 return err 40 } 41 42 cps.interfaceKey = joiner.InterfaceKey(options.StringDefault("interface_key", string(InterfaceKey))) 43 44 if os.Getenv("SHOW_CONNECTS") != "" { 45 l.Infof("CONNECTING TO PG: %#v", cps.cfgPg) 46 } 47 48 db, err := sqllib_pg.Connect(cps.cfgPg) 49 if err != nil || db == nil { 50 return errors.CommonError(err, fmt.Sprintf("got %#v", db)) 51 } 52 53 if err = joinerOp.Join(db, cps.interfaceKey); err != nil { 54 return errors.CommonError(err, fmt.Sprintf("can't join *sql.DB with key '%s'", cps.interfaceKey)) 55 } 56 57 return nil 58 }