feat: refactor configuration management to use viper for environment variables

This commit is contained in:
Habib Fatkhul Rohman 2025-12-03 11:43:00 +07:00
parent 95323b9f65
commit db82ad3364
6 changed files with 29 additions and 19 deletions

View File

@ -33,6 +33,7 @@ import (
"github.com/Caknoooo/go-gin-clean-starter/modules/warehouse"
"github.com/Caknoooo/go-gin-clean-starter/modules/zona"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
@ -58,13 +59,13 @@ func args(injector *do.Injector) bool {
func run(server *gin.Engine) {
server.Static("/assets", "./assets")
port := os.Getenv("GOLANG_PORT")
port := viper.GetString("GOLANG_PORT")
if port == "" {
port = "8888"
}
var serve string
if os.Getenv("APP_ENV") == "localhost" {
if viper.GetString("APP_ENV") == "localhost" {
serve = "0.0.0.0:" + port
} else {
serve = ":" + port
@ -102,6 +103,13 @@ func run(server *gin.Engine) {
// @externalDocs.description OpenAPI
// @externalDocs.url https://swagger.io/resources/open-api/
func main() {
viper.SetConfigFile(".env")
err := viper.ReadInConfig()
if err != nil {
log.Fatal("Error loading .env file")
}
viper.AutomaticEnv()
var (
injector = do.New()

View File

@ -2,10 +2,10 @@ package config
import (
"fmt"
"os"
"github.com/Caknoooo/go-gin-clean-starter/pkg/constants"
"github.com/joho/godotenv"
"github.com/spf13/viper"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
@ -15,18 +15,18 @@ func RunExtension(db *gorm.DB) {
}
func SetUpDatabaseConnection() *gorm.DB {
if os.Getenv("APP_ENV") != constants.ENUM_RUN_PRODUCTION {
if viper.GetString("APP_ENV") != constants.ENUM_RUN_PRODUCTION {
err := godotenv.Load(".env")
if err != nil {
panic(err)
}
}
dbUser := os.Getenv("DB_USER")
dbPass := os.Getenv("DB_PASS")
dbHost := os.Getenv("DB_HOST")
dbName := os.Getenv("DB_NAME")
dbPort := os.Getenv("DB_PORT")
dbUser := viper.GetString("DB_USER")
dbPass := viper.GetString("DB_PASS")
dbHost := viper.GetString("DB_HOST")
dbName := viper.GetString("DB_NAME")
dbPort := viper.GetString("DB_PORT")
dsn := fmt.Sprintf("host=%v user=%v password=%v dbname=%v port=%v", dbHost, dbUser, dbPass, dbName, dbPort)

View File

@ -15,6 +15,7 @@ type EmailConfig struct {
func NewEmailConfig() (*EmailConfig, error) {
viper.SetConfigFile(".env")
if err := viper.ReadInConfig(); err != nil {
return nil, err
}

View File

@ -11,6 +11,7 @@ import (
amqp "github.com/rabbitmq/amqp091-go"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
"gorm.io/gorm/logger"
)
@ -70,12 +71,12 @@ func SetupLoggerLogrus() *logrus.Logger {
// ✔️ Pasang RabbitMQ Hook kalau channel berhasil connect
if RabbitChannel != nil {
queue := os.Getenv("RABBITMQ_LOG_QUEUE") // contoh: log_queue
queue := viper.GetString("RABBITMQ_LOG_QUEUE") // contoh: log_queue
hook := NewRabbitMQHook(RabbitChannel, queue)
logger.AddHook(hook)
}
logLevel := strings.ToLower(os.Getenv("LOG_LEVEL"))
logLevel := strings.ToLower(viper.GetString("LOG_LEVEL"))
if logLevel == "production" {
logger.SetLevel(logrus.WarnLevel)
} else {

View File

@ -3,20 +3,20 @@ package config
import (
"fmt"
"log"
"os"
amqp "github.com/rabbitmq/amqp091-go"
"github.com/spf13/viper"
)
var RabbitConn *amqp.Connection
var RabbitChannel *amqp.Channel
func InitRabbitMQ() {
host := os.Getenv("RABBITMQ_HOST")
port := os.Getenv("RABBITMQ_PORT")
user := os.Getenv("RABBITMQ_USER")
pass := os.Getenv("RABBITMQ_PASSWORD")
queue := os.Getenv("RABBITMQ_LOG_QUEUE") // contoh: log_queue
host := viper.GetString("RABBITMQ_HOST")
port := viper.GetString("RABBITMQ_PORT")
user := viper.GetString("RABBITMQ_USER")
pass := viper.GetString("RABBITMQ_PASSWORD")
queue := viper.GetString("RABBITMQ_LOG_QUEUE") // contoh: log_queue
uri := fmt.Sprintf("amqp://%s:%s@%s:%s/",
user, pass, host, port,

View File

@ -5,10 +5,10 @@ import (
"encoding/base64"
"fmt"
"log"
"os"
"time"
"github.com/golang-jwt/jwt/v4"
"github.com/spf13/viper"
)
type UserTokenInfo struct {
@ -51,7 +51,7 @@ func NewJWTService() JWTService {
}
func getSecretKey() string {
secretKey := os.Getenv("JWT_SECRET")
secretKey := viper.GetString("JWT_SECRET")
if secretKey == "" {
secretKey = "WMS-WareifySecretKey"
}