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  }