2023-10-08 15:59:42 +07:00
|
|
|
package config
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
|
_ "gopkg.in/yaml.v3"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
2025-07-18 20:10:29 +07:00
|
|
|
YAML_PATH = "infra/%s"
|
2023-10-08 15:59:42 +07:00
|
|
|
ENV_MODE = "ENV_MODE"
|
|
|
|
|
DEFAULT_ENV_MODE = "development"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
validEnvMode = map[string]struct{}{
|
|
|
|
|
"local": {},
|
|
|
|
|
"development": {},
|
|
|
|
|
"production": {},
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Config struct {
|
2025-07-18 20:10:29 +07:00
|
|
|
Server Server `mapstructure:"server"`
|
|
|
|
|
Database Database `mapstructure:"postgresql"`
|
|
|
|
|
Jwt Jwt `mapstructure:"jwt"`
|
|
|
|
|
Log Log `mapstructure:"log"`
|
|
|
|
|
S3Config S3Config `mapstructure:"s3"`
|
2025-09-18 01:32:01 +07:00
|
|
|
Fonnte Fonnte `mapstructure:"fonnte"`
|
2023-10-08 15:59:42 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
config *Config
|
|
|
|
|
configOnce sync.Once
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func LoadConfig() *Config {
|
|
|
|
|
envMode := os.Getenv(ENV_MODE)
|
|
|
|
|
if _, ok := validEnvMode[envMode]; !ok {
|
2025-07-18 20:10:29 +07:00
|
|
|
envMode = DEFAULT_ENV_MODE
|
2023-10-08 15:59:42 +07:00
|
|
|
}
|
|
|
|
|
cfgFilePath := fmt.Sprintf(YAML_PATH, envMode)
|
|
|
|
|
|
|
|
|
|
configOnce.Do(func() {
|
|
|
|
|
v := viper.New()
|
|
|
|
|
v.SetConfigType("yaml")
|
|
|
|
|
v.AddConfigPath(".")
|
|
|
|
|
v.SetConfigName(cfgFilePath)
|
|
|
|
|
if err := v.ReadInConfig(); err != nil {
|
|
|
|
|
panic(fmt.Errorf("failed to read config file: %s", err))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
config = &Config{}
|
|
|
|
|
if err := v.Unmarshal(config); err != nil {
|
|
|
|
|
panic(fmt.Errorf("failed to unmarshal config: %s", err))
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return config
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Config) Auth() *AuthConfig {
|
|
|
|
|
return &AuthConfig{
|
2025-09-20 17:17:00 +07:00
|
|
|
jwtTokenSecret: c.Jwt.Token.Secret,
|
|
|
|
|
jwtTokenExpiresTTL: c.Jwt.Token.ExpiresTTL,
|
|
|
|
|
refreshTokenSecret: c.Jwt.RefreshToken.Secret,
|
|
|
|
|
refreshTokenExpiresTTL: c.Jwt.RefreshToken.ExpiresTTL,
|
2023-10-08 15:59:42 +07:00
|
|
|
}
|
|
|
|
|
}
|
2025-07-18 20:10:29 +07:00
|
|
|
|
2025-09-18 12:27:03 +07:00
|
|
|
func (c *Config) GetCustomerJWTSecret() string {
|
|
|
|
|
return c.Jwt.Customer.Secret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Config) GetCustomerJWTExpiresTTL() int {
|
|
|
|
|
return c.Jwt.Customer.ExpiresTTL
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-18 20:10:29 +07:00
|
|
|
func (c *Config) LogLevel() string {
|
|
|
|
|
return c.Log.LogLevel
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Config) Port() string {
|
|
|
|
|
return c.Server.Port
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Config) LogFormat() string {
|
|
|
|
|
return c.Log.LogFormat
|
|
|
|
|
}
|
2025-09-18 01:32:01 +07:00
|
|
|
|
|
|
|
|
func (c *Config) GetFonnte() *Fonnte {
|
|
|
|
|
return &c.Fonnte
|
|
|
|
|
}
|