109 lines
2.4 KiB
Go
109 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
"github.com/pahmiudahgede/senggoldong/domain"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var (
|
|
DB *gorm.DB
|
|
DBHost string
|
|
DBPort string
|
|
DBName string
|
|
DBUser string
|
|
DBPassword string
|
|
|
|
APIKey string
|
|
ServerHost string
|
|
ServerPort string
|
|
|
|
RedisClient *redis.Client
|
|
RedisHost string
|
|
RedisPort string
|
|
RedisPassword string
|
|
RedisDB int
|
|
)
|
|
|
|
func InitConfig() {
|
|
ServerHost = os.Getenv("SERVER_HOST")
|
|
ServerPort = os.Getenv("SERVER_PORT")
|
|
DBHost = os.Getenv("DB_HOST")
|
|
DBPort = os.Getenv("DB_PORT")
|
|
DBName = os.Getenv("DB_NAME")
|
|
DBUser = os.Getenv("DB_USER")
|
|
DBPassword = os.Getenv("DB_PASSWORD")
|
|
APIKey = os.Getenv("API_KEY")
|
|
RedisHost = os.Getenv("REDIS_HOST")
|
|
RedisPort = os.Getenv("REDIS_PORT")
|
|
RedisPassword = os.Getenv("REDIS_PASSWORD")
|
|
RedisDB = 0
|
|
|
|
if ServerHost == "" || ServerPort == "" || DBHost == "" || DBPort == "" || DBName == "" || DBUser == "" || DBPassword == "" || APIKey == "" {
|
|
log.Fatal("Error: environment variables yang dibutuhkan tidak ada")
|
|
}
|
|
}
|
|
|
|
func InitDatabase() {
|
|
InitConfig()
|
|
|
|
dsn := fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s sslmode=disable",
|
|
DBHost, DBPort, DBUser, DBName, DBPassword)
|
|
|
|
var err error
|
|
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
log.Fatal("gagal terhubung ke database: ", err)
|
|
}
|
|
|
|
err = DB.AutoMigrate(
|
|
&domain.Point{},
|
|
&domain.User{},
|
|
&domain.UserRole{},
|
|
&domain.UserPin{},
|
|
&domain.MenuAccess{},
|
|
&domain.PlatformHandle{},
|
|
&domain.Address{},
|
|
&domain.Article{},
|
|
&domain.TrashCategory{},
|
|
&domain.TrashDetail{},
|
|
&domain.Banner{},
|
|
&domain.CoverageArea{},
|
|
&domain.CoverageDistric{},
|
|
&domain.CoverageSubdistrict{},
|
|
&domain.RequestPickup{},
|
|
&domain.RequestItem{},
|
|
&domain.Product{},
|
|
&domain.ProductImage{},
|
|
&domain.Store{},
|
|
)
|
|
if err != nil {
|
|
log.Fatal("Error: Failed to auto migrate domain:", err)
|
|
}
|
|
|
|
fmt.Println("Koneksi ke database berhasil dan migrasi dilakukan")
|
|
}
|
|
|
|
func InitRedis() {
|
|
InitConfig()
|
|
|
|
RedisClient = redis.NewClient(&redis.Options{
|
|
Addr: fmt.Sprintf("%s:%s", RedisHost, RedisPort),
|
|
Password: RedisPassword,
|
|
DB: RedisDB,
|
|
})
|
|
|
|
_, err := RedisClient.Ping(context.Background()).Result()
|
|
if err != nil {
|
|
log.Fatal("Gagal terhubung ke Redis:", err)
|
|
}
|
|
|
|
fmt.Println("Koneksi ke Redis berhasil")
|
|
}
|