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

73 lines
1.4 KiB
Go
Raw Normal View History

2026-05-21 15:20:12 +08:00
package config
import (
"fmt"
"os"
"strconv"
)
type Config struct {
2026-06-04 19:39:08 +08:00
Env string
Host string
Port int
Database DatabaseConfig
Meilisearch MeilisearchConfig
Redis RedisConfig
Equalize EqualizeConfig
2026-06-05 20:15:30 +08:00
S3 S3Config
2026-06-04 19:39:08 +08:00
EnablePersistTask bool
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{
2026-06-04 19:39:08 +08:00
Env: env,
Host: getEnv("APP_HOST", "0.0.0.0"),
Port: port,
Database: db,
Meilisearch: ms,
Redis: rd,
Equalize: eq,
2026-06-05 20:15:30 +08:00
S3: s3cfg,
2026-06-04 19:39:08 +08:00
EnablePersistTask: getEnv("ENABLE_PERSIST_TASK", "false") == "true",
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
}