micrach/config/config.go
Yanislav Igonin 642c1878cc
All checks were successful
CI / verify (push) Successful in 11m7s
feat: register with gateway via board token upsert
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 14:08:38 +04:00

119 lines
2.7 KiB
Go

package config
import (
"fmt"
"log"
"os"
"strconv"
)
type GatewayConfig struct {
Url string
Token string
BoardUrl string
BoardName string
}
type AppConfig struct {
Env string
Port int
IsDbSeeded bool
IsRateLimiterEnabled bool
ThreadsMaxCount int
ThreadBumpLimit int
IsCaptchaActive bool
Gateway GatewayConfig
}
type DbConfig struct {
Url string
}
func getValueOrDefaultBoolean(value string, defaultValue bool) bool {
if value == "" {
return defaultValue
}
return value == "true"
}
func getValueOrDefaultInt(value string, defaultValue int) int {
if value == "" {
return defaultValue
}
intValue, err := strconv.Atoi(value)
if err != nil {
log.Panicln(fmt.Sprintf("Could not parse %s to int", value))
}
return intValue
}
func getValueOrDefaultString(value string, defaultValue string) string {
if value == "" {
return defaultValue
}
return value
}
func getGatewayConfig() GatewayConfig {
return GatewayConfig{
Url: os.Getenv("GATEWAY_URL"),
Token: os.Getenv("GATEWAY_BOARD_TOKEN"),
BoardUrl: os.Getenv("GATEWAY_BOARD_URL"),
BoardName: os.Getenv("GATEWAY_BOARD_NAME"),
}
}
func validateGatewayConfig(gateway GatewayConfig) {
if gateway.Url == "" {
return
}
if gateway.Token == "" {
log.Panicln("GATEWAY_BOARD_TOKEN is required when GATEWAY_URL is set")
}
if gateway.BoardUrl == "" {
log.Panicln("GATEWAY_BOARD_URL is required when GATEWAY_URL is set")
}
if gateway.BoardName == "" {
log.Panicln("GATEWAY_BOARD_NAME is required when GATEWAY_URL is set")
}
}
func getAppConfig() AppConfig {
env := getValueOrDefaultString(os.Getenv("ENV"), "release")
port := getValueOrDefaultInt(os.Getenv("PORT"), 3000)
isDbSeeded := getValueOrDefaultBoolean(os.Getenv("IS_DB_SEEDED"), false)
isRateLimiterEnabled := getValueOrDefaultBoolean(os.Getenv("IS_RATE_LIMITER_ENABLED"), true)
threadsMaxCount := getValueOrDefaultInt(os.Getenv("THREADS_MAX_COUNT"), 50)
threadBumpLimit := getValueOrDefaultInt(os.Getenv("THREAD_BUMP_LIMIT"), 500)
isCaptchaActive := getValueOrDefaultBoolean(os.Getenv("IS_CAPTCHA_ACTIVE"), true)
gateway := getGatewayConfig()
validateGatewayConfig(gateway)
return AppConfig{
Env: env,
Port: port,
IsDbSeeded: isDbSeeded,
IsRateLimiterEnabled: isRateLimiterEnabled,
ThreadsMaxCount: threadsMaxCount,
ThreadBumpLimit: threadBumpLimit,
IsCaptchaActive: isCaptchaActive,
Gateway: gateway,
}
}
func getDbConfig() DbConfig {
url := getValueOrDefaultString(os.Getenv("POSTGRES_URL"), "postgresql://localhost/micrach")
return DbConfig{
Url: url,
}
}
var App AppConfig
var Db DbConfig
func Init() {
App = getAppConfig()
Db = getDbConfig()
}