Files
app-api/internal/config/config.go
T

89 lines
1.7 KiB
Go
Raw Normal View History

2026-05-21 15:20:12 +08:00
package config
import (
"fmt"
"os"
"strconv"
)
type Config struct {
Env string
Host string
Port int
Database DatabaseConfig
Meilisearch MeilisearchConfig
Redis RedisConfig
Equalize EqualizeConfig
S3 S3Config
EnablePersistTask bool
ShareCodeMaxPerMac int
ShareCodeTTLMin int
2026-05-21 15:20:12 +08:00
}
func Load() (*Config, error) {
port, err := strconv.Atoi(getEnv("APP_PORT", "8080"))
if err != nil {
return nil, fmt.Errorf("invalid APP_PORT: %w", err)
}
env := getEnv("APP_ENV", "development")
db, err := loadDatabase(env)
if err != nil {
return nil, err
}
if err := db.validate(env); err != nil {
return nil, err
}
ms := loadMeilisearch(env)
if err := ms.validate(); err != nil {
return nil, err
}
rd := loadRedis(env)
if err := rd.validate(); err != nil {
return nil, err
}
eq := loadEqualize(env)
2026-06-05 20:15:30 +08:00
s3cfg := loadS3(env)
2026-05-21 15:20:12 +08:00
return &Config{
Env: env,
Host: getEnv("APP_HOST", "0.0.0.0"),
Port: port,
Database: db,
Meilisearch: ms,
Redis: rd,
Equalize: eq,
S3: s3cfg,
EnablePersistTask: getEnv("ENABLE_PERSIST_TASK", "false") == "true",
ShareCodeMaxPerMac: getEnvInt("SHARE_CODE_MAX_PER_MAC", 1),
ShareCodeTTLMin: getEnvInt("SHARE_CODE_TTL_MIN", 30),
2026-05-21 15:20:12 +08:00
}, nil
}
func (c *Config) Addr() string {
return fmt.Sprintf("%s:%d", c.Host, c.Port)
}
func getEnv(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
}
func getEnvInt(key string, fallback int) int {
v := os.Getenv(key)
if v == "" {
return fallback
}
n, err := strconv.Atoi(v)
if err != nil {
return fallback
}
return n
}