45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
type Config struct {
|
|
AdminToken string `json:"adminToken"`
|
|
AuthAPIURL string `json:"authApiUrl"`
|
|
|
|
// Database DSN. If empty, falls back to the test DB DSN.
|
|
// Format: "user:pass@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
|
|
DatabaseDSN string `json:"databaseDsn"`
|
|
}
|
|
|
|
// Default DSNs for each environment.
|
|
const (
|
|
TestDSN = "mengyastore-test:mengyastore-test@tcp(10.1.1.100:3306)/mengyastore-test?charset=utf8mb4&parseTime=True&loc=Local"
|
|
ProdDSN = "mengyastore:mengyastore@tcp(192.168.1.100:3306)/mengyastore?charset=utf8mb4&parseTime=True&loc=Local"
|
|
)
|
|
|
|
func Load(path string) (*Config, error) {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("read config: %w", err)
|
|
}
|
|
var cfg Config
|
|
if err := json.Unmarshal(data, &cfg); err != nil {
|
|
return nil, fmt.Errorf("parse config: %w", err)
|
|
}
|
|
if cfg.AdminToken == "" {
|
|
cfg.AdminToken = "shumengya520"
|
|
}
|
|
// Default to test DB if not configured; environment variable overrides config file.
|
|
if dsn := os.Getenv("DATABASE_DSN"); dsn != "" {
|
|
cfg.DatabaseDSN = dsn
|
|
}
|
|
if cfg.DatabaseDSN == "" {
|
|
cfg.DatabaseDSN = TestDSN
|
|
}
|
|
return &cfg, nil
|
|
}
|