Files
query-orchestration/internal/serviceconfig/database/config.go
T
Michael McGuinness 7001ca854c Merged in feature/docinitialisation (pull request #41)
Queuing Changes and Cfg Testing

* staarting

* staarting

* startedpush

* note

* save

* mocking

* removederrs

* fixtests

* cleanuperrs

* newenvsetup

* preppingtests

* queue

* mmovetocfgpassunittests

* sortoutconfig

* passinginteg

* deps

* fixtests
2025-02-03 17:30:50 +00:00

79 lines
1.7 KiB
Go

package database
import (
"context"
"fmt"
"queryorchestration/internal/database/repository"
"github.com/jackc/pgx/v5/pgxpool"
)
type DBConfig struct {
DBUser string `env:"DB_USER,required,notEmpty"`
DBSecret string `env:"DB_PASS,required,notEmpty"`
DBHost string `env:"DB_HOST,required,notEmpty"`
DBPort int `env:"DB_PORT,required,notEmpty"`
DBName string `env:"DB_NAME,required,notEmpty"`
DBNoSSL bool `env:"DB_NOSSL" envDefault:"false"`
DBPool Pool
DBQueries *repository.Queries
DBPoolConfig *pgxpool.Config
DBEnumTypes []string
}
type ConfigProvider interface {
GetDBBaseURI() string
GetDBURI() string
GetDBOpts() map[string]string
GetDBOptsString() string
GetDBName() string
GetDBDriver() string
SetDBPoolConfig() error
SetDBPool(ctx context.Context) error
GetDBQueries() *repository.Queries
GetDBPool() Pool
ExecuteDBTransaction(context.Context, func(context.Context, *repository.Queries) error) error
}
func (b *DBConfig) GetDBOpts() map[string]string {
opts := make(map[string]string)
if b.DBNoSSL {
opts["sslmode"] = "disable"
}
return opts
}
func (b *DBConfig) GetDBOptsString() string {
str := ""
opts := b.GetDBOpts()
isFirst := true
for key, value := range opts {
if !isFirst {
str += "&"
} else {
isFirst = false
}
str += fmt.Sprintf("%s=%s", key, value)
}
return str
}
func (b *DBConfig) GetDBDriver() string {
return "postgres"
}
func (b *DBConfig) GetDBBaseURI() string {
return fmt.Sprintf("%s://%s:%s@%s:%d/", b.GetDBDriver(), b.DBUser, b.DBSecret, b.DBHost, b.DBPort)
}
func (b *DBConfig) GetDBName() string {
return b.DBName
}
func (b *DBConfig) GetDBURI() string {
return fmt.Sprintf("%s%s?%s", b.GetDBBaseURI(), b.DBName, b.GetDBOptsString())
}