Files
app-api/internal/config/config.go
T
2026-06-04 19:39:08 +08:00

70 lines
1.3 KiB
Go

package config
import (
"fmt"
"os"
"strconv"
)
type Config struct {
Env string
Host string
Port int
Database DatabaseConfig
Meilisearch MeilisearchConfig
Redis RedisConfig
Equalize EqualizeConfig
EnablePersistTask bool
}
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)
return &Config{
Env: env,
Host: getEnv("APP_HOST", "0.0.0.0"),
Port: port,
Database: db,
Meilisearch: ms,
Redis: rd,
Equalize: eq,
EnablePersistTask: getEnv("ENABLE_PERSIST_TASK", "false") == "true",
}, 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
}