feat: add connect Non-URL

This commit is contained in:
Siwoo Jeon 2025-05-11 18:20:12 +09:00
parent 1b715daf8f
commit b2b45866bc
Signed by: migan
GPG key ID: 036E9A8C5E8E48DA
3 changed files with 65 additions and 9 deletions

View file

@ -1,11 +1,24 @@
# Database (URL 형식과 Non-URL 형식 중 하나를 선택)
## URL 형식
DATABASE_URL=
## Non-URL 형식
DATABASE_USERNAME=
DATABASE_PASSWORD=
DATABASE_HOSTNAME= # 해당 값은 도커로 실행할 때 필요하지 않음.
DATABASE_PORT=
DATABASE_AUTH_SOURCE= # 기본 값: admin
## 필수 값
DATABASE_NAME=
## 데이터베이스 마이그레이션용
PREVIOUS_DATABASE_URL=
# 봇
BOT_TOKEN=
BOT_PREFIX=
BOT_OWNER_ID=
# If you need
PREVIOUS_DATABASE_URL=
# 학습 (필수 아님)
TRAIN_USER_ID=

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"makefile.configureOnOpen": false
}

View file

@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
"strconv"
"github.com/joho/godotenv"
)
@ -18,11 +19,26 @@ type trainConfig struct {
UserID string
}
type databaseConfig struct {
Name string
URL string
HostName string
Username string
Password string
AuthSource string
Port int
}
// MuffinConfig for Muffin bot
type MuffinConfig struct {
Bot botConfig
Train trainConfig
DatabaseURL string
Bot botConfig
Train trainConfig
Database databaseConfig
// Deprecated: Use Database.URL
DatabaseURL string
// Deprecated: Use Database.Name
DatabaseName string
}
@ -30,7 +46,7 @@ var Config *MuffinConfig
func init() {
godotenv.Load()
Config = &MuffinConfig{Bot: botConfig{}, Train: trainConfig{}}
Config = &MuffinConfig{Bot: botConfig{}, Train: trainConfig{}, Database: databaseConfig{}}
setConfig(Config)
}
@ -53,6 +69,30 @@ func setConfig(config *MuffinConfig) {
config.Train.UserID = getValue("TRAIN_USER_ID")
config.DatabaseURL = getRequiredValue("DATABASE_URL")
config.DatabaseName = getRequiredValue("DATABASE_NAME")
config.Database.URL = getValue("DATABASE_URL")
config.Database.HostName = getValue("DATABASE_HOSTNAME")
config.Database.Password = getValue("DATABASE_PASSWORD")
config.Database.Username = getValue("DATABASE_USERNAME")
config.Database.AuthSource = getValue("DATABASE_AUTH_SOURCE")
config.Database.Name = getRequiredValue("DATABASE_NAME")
port, err := strconv.Atoi(getValue("DATABASE_PORT"))
if err != nil {
log.Println("[goMuffin] 'DATABASE_PORT'값을 int로 파싱할 수 없어요.")
log.Fatalln(err)
}
config.Database.Port = port
if config.Database.AuthSource == "" {
config.Database.AuthSource = "admin"
}
if config.Database.URL == "" {
config.Database.URL = fmt.Sprintf("mongodb://%s:%s@%s:%d/?authSource=%s", config.Database.Username, config.Database.Password, config.Database.HostName, config.Database.Port, config.Database.AuthSource)
}
fmt.Println(config.Database.URL)
// Deprecated된 Value
config.DatabaseURL = config.Database.URL
config.DatabaseName = config.Database.Name
}