Browse Source

feat: config files

master
Brett Bender 2 years ago
parent
commit
102ead35af
4 changed files with 57 additions and 3 deletions
  1. +3
    -1
      .gitignore
  2. +20
    -2
      cmd/server/server.go
  3. +9
    -0
      config.example.json
  4. +25
    -0
      internal/config/config.go

+ 3
- 1
.gitignore View File

@ -114,4 +114,6 @@ fabric.properties
# End of https://www.toptal.com/developers/gitignore/api/goland+all,go
build
build
config.json

+ 20
- 2
cmd/server/server.go View File

@ -2,7 +2,12 @@ package main
import (
"flag"
"git.brettb.xyz/goinv/server/internal/config"
"github.com/knadh/koanf/parsers/json"
"github.com/knadh/koanf/providers/env"
"github.com/knadh/koanf/providers/file"
"log"
"strings"
"git.brettb.xyz/goinv/server/internal/api"
"git.brettb.xyz/goinv/server/internal/storage"
@ -13,9 +18,22 @@ func main() {
seed := flag.Bool("seed", false, "seed the database")
flag.Parse()
datastore, err := storage.NewDataStorePG("127.0.0.1", "postgres", "password", "em_test", "disable") // TODO: CONFIGURATION
config.LoadConfig(file.Provider("config.json"), json.Parser())
config.LoadConfig(env.Provider("GOINV_SRV_", ".", func(s string) string {
return strings.Replace(strings.ToLower(
strings.TrimPrefix(s, "GOINV_SRV_")), "_", ".", -1,
)
}), nil)
var cfg config.Config
err := config.Unmarshal(&cfg)
if err != nil {
log.Fatalf("could not load config: %v", err)
}
datastore, err := storage.NewDataStorePG(cfg.DB.Host, cfg.DB.Username, cfg.DB.Password, cfg.DB.Database, cfg.DB.SSLMode)
if err != nil {
panic(err)
log.Fatalf("could not connect to database: %v", err)
}
if *seed {


+ 9
- 0
config.example.json View File

@ -0,0 +1,9 @@
{
"db": {
"host": "127.0.0.1",
"username": "postgres",
"password": "password",
"database": "em_test",
"ssl_mode": "disable"
}
}

+ 25
- 0
internal/config/config.go View File

@ -0,0 +1,25 @@
package config
import "github.com/knadh/koanf"
var (
K = koanf.New(".")
)
type Config struct {
DB struct {
Host string `koanf:"host"`
Username string `koanf:"username"`
Password string `koanf:"password"`
Database string `koanf:"database"`
SSLMode string `koanf:"ssl_mode"`
} `koanf:"db"`
}
func LoadConfig(provider koanf.Provider, parser koanf.Parser) error {
return K.Load(provider, parser)
}
func Unmarshal(o interface{}) error {
return K.Unmarshal("", o)
}

Loading…
Cancel
Save