首次提交
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Env string
|
||||
Host string
|
||||
Port int
|
||||
Database DatabaseConfig
|
||||
Meilisearch MeilisearchConfig
|
||||
Redis RedisConfig
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
return &Config{
|
||||
Env: env,
|
||||
Host: getEnv("APP_HOST", "0.0.0.0"),
|
||||
Port: port,
|
||||
Database: db,
|
||||
Meilisearch: ms,
|
||||
Redis: rd,
|
||||
}, 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
|
||||
}
|
||||
Reference in New Issue
Block a user