58 lines
1.9 KiB
Go
58 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"sort"
|
|
"strings"
|
|
"time"
|
|
|
|
"allaboutapps.dev/aw/go-starter/internal/util"
|
|
)
|
|
|
|
// The DatabaseMigrationTable name is baked into the binary
|
|
// This setting should always be in sync with dbconfig.yml, sqlboiler.toml and the live database (e.g. to be able to test producation dumps locally)
|
|
const DatabaseMigrationTable = "migrations"
|
|
|
|
// The DatabaseMigrationFolder (folder with all *.sql migrations).
|
|
// This settings should always be in sync with dbconfig.yaml and Dockerfile (the final app stage).
|
|
// It's expected that the migrations folder lives at the root of this project or right next to the app binary.
|
|
var DatabaseMigrationFolder = filepath.Join(util.GetProjectRootDir(), "/migrations")
|
|
|
|
type Database struct {
|
|
Host string
|
|
Port int
|
|
Username string
|
|
Password string `json:"-"` // sensitive
|
|
Database string
|
|
AdditionalParams map[string]string `json:"additionalParams,omitempty"` // Optional additional connection parameters mapped into the connection string
|
|
MaxOpenConns int
|
|
MaxIdleConns int
|
|
ConnMaxLifetime time.Duration
|
|
}
|
|
|
|
// ConnectionString generates a connection string to be passed to sql.Open or equivalents, assuming Postgres syntax
|
|
func (c Database) ConnectionString() string {
|
|
var builder strings.Builder
|
|
builder.WriteString(fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", c.Host, c.Port, c.Username, c.Password, c.Database))
|
|
|
|
if _, ok := c.AdditionalParams["sslmode"]; !ok {
|
|
builder.WriteString(" sslmode=disable")
|
|
}
|
|
|
|
if len(c.AdditionalParams) > 0 {
|
|
params := make([]string, 0, len(c.AdditionalParams))
|
|
for param := range c.AdditionalParams {
|
|
params = append(params, param)
|
|
}
|
|
|
|
sort.Strings(params)
|
|
|
|
for _, param := range params {
|
|
fmt.Fprintf(&builder, " %s=%s", param, c.AdditionalParams[param])
|
|
}
|
|
}
|
|
|
|
return builder.String()
|
|
}
|