| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package config
- import (
- "fmt"
- "log"
- "net/url"
- "os"
- "path/filepath"
- "strconv"
- "strings"
- "github.com/joho/godotenv"
- "github.com/felamaslen/gmus-backend/pkg/logger"
- )
- var envLoaded = false
- func getEnvFile() (string, bool) {
- goEnv, _ := os.LookupEnv("GO_ENV")
- switch goEnv {
- case "test":
- return "test.env", true
- case "ci":
- return "ci.env", true
- case "development":
- return ".env", true
- default:
- return "", false
- }
- }
- func loadEnv() {
- envFileBase, loadEnvFile := getEnvFile()
- cwd, _ := os.Getwd()
- envFile := filepath.Join(cwd, envFileBase)
- if loadEnvFile {
- err := godotenv.Load(envFile)
- if err != nil {
- log.Printf("Error loading dotenv file: %v\n", err)
- } else {
- envLoaded = true
- }
- }
- }
- func getDatabaseUrl() string {
- host, hasHost := os.LookupEnv("POSTGRES_HOST")
- if !hasHost {
- log.Fatal("Must set POSTGRES_HOST")
- }
- user := os.Getenv("POSTGRES_USER")
- password := os.Getenv("POSTGRES_PASSWORD")
- portDev, hasPortDev := os.LookupEnv("DB_PORT_GMUS_DEV")
- port, hasPort := os.LookupEnv("POSTGRES_PORT")
- if hasPortDev {
- port = portDev
- } else if !hasPort {
- port = "5432"
- }
- portNumeric, err := strconv.Atoi(port)
- if err != nil {
- log.Fatal("POSTGRES_PORT must be numeric")
- }
- database, hasDatabase := os.LookupEnv("POSTGRES_DATABASE")
- if !hasDatabase {
- log.Fatal("Must set POSTGRES_DATABASE")
- }
- databaseUrl := fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=disable", user, url.QueryEscape(password), host, portNumeric, database)
- return databaseUrl
- }
- const defaultLogLevel = logger.LevelInfo
- func getLogLevel() logger.LogLevel {
- level, hasLevel := os.LookupEnv("LOG_LEVEL")
- if !hasLevel {
- return defaultLogLevel
- }
- levelInt, err := strconv.Atoi(level)
- if err != nil {
- return defaultLogLevel
- }
- switch levelInt {
- case 0:
- return logger.LevelNone
- case 1:
- return logger.LevelError
- case 2:
- return logger.LevelWarn
- case 3:
- return logger.LevelInfo
- case 4:
- return logger.LevelVerbose
- case 5:
- return logger.LevelDebug
- }
- return defaultLogLevel
- }
- func getPort() int {
- var defaultPort = 3000
- port, hasPort := os.LookupEnv("PORT")
- if !hasPort {
- return defaultPort
- }
- result, err := strconv.Atoi(port)
- if err != nil {
- return defaultPort
- }
- return result
- }
- func getListenHost() string {
- var defaultHost = "localhost"
- host, hasHost := os.LookupEnv("HOST")
- if !hasHost {
- return defaultHost
- }
- return host
- }
- func getRedisUrl() string {
- url, hasUrl := os.LookupEnv("REDIS_URL")
- if !hasUrl {
- return "localhost:6379"
- }
- return url
- }
- func getAllowedOrigins() []string {
- origins, hasOrigins := os.LookupEnv("ALLOWED_ORIGINS")
- if !hasOrigins {
- return []string{"*"}
- }
- return strings.Split(origins, ",")
- }
- func getLibraryWatch() bool {
- watch, _ := os.LookupEnv("LIBRARY_WATCH")
- return watch != "false"
- }
- type config struct {
- DatabaseUrl string
- LogLevel logger.LogLevel
- LibraryDirectory string
- LibraryWatch bool
- Host string
- Port int
- RedisUrl string
- AllowedOrigins []string
- }
|