Files
Datarush/internal/gw/config/config.go
T
2025-12-17 17:33:02 +03:00

102 lines
2.3 KiB
Go

package config
import (
"fmt"
"os"
"strconv"
)
type Config struct {
Server ServerConfig
GRPC GRPCConfig
S3 S3Config
Auth AuthConfig
}
type ServerConfig struct {
Port string
Host string
}
type GRPCConfig struct {
AuthServiceAddr string
UserServiceAddr string
CompetitionServiceAddr string
TaskServiceAddr string
SubmissionServiceAddr string
ResultsServiceAddr string
ReviewServiceAddr string
AchievementsServiceAddr string
}
type S3Config struct {
AccessKeyID string
SecretAccessKey string
Region string
Bucket string
Endpoint string
}
type AuthConfig struct {
JWTSecret string
}
func Load() (*Config, error) {
cfg := &Config{
Server: ServerConfig{
Port: getEnv("SERVER_PORT", "8080"),
Host: getEnv("SERVER_HOST", "0.0.0.0"),
},
GRPC: GRPCConfig{
AuthServiceAddr: getEnvRequired("AUTH_SERVICE_ADDR"),
UserServiceAddr: getEnvRequired("USER_SERVICE_ADDR"),
CompetitionServiceAddr: getEnvRequired("COMPETITION_SERVICE_ADDR"),
TaskServiceAddr: getEnvRequired("TASK_SERVICE_ADDR"),
SubmissionServiceAddr: getEnvRequired("SUBMISSION_SERVICE_ADDR"),
ResultsServiceAddr: getEnvRequired("RESULTS_SERVICE_ADDR"),
ReviewServiceAddr: getEnvRequired("REVIEW_SERVICE_ADDR"),
AchievementsServiceAddr: getEnvRequired("ACHIEVEMENTS_SERVICE_ADDR"),
},
S3: S3Config{
AccessKeyID: getEnvRequired("AWS_ACCESS_KEY_ID"),
SecretAccessKey: getEnvRequired("AWS_SECRET_ACCESS_KEY"),
Region: getEnv("AWS_REGION", ""),
Bucket: getEnvRequired("S3_BUCKET"),
Endpoint: getEnv("S3_ENDPOINT", ""),
},
Auth: AuthConfig{
JWTSecret: getEnv("JWT_SECRET", ""),
},
}
return cfg, nil
}
func getEnv(key, defaultValue string) string {
value := os.Getenv(key)
if value == "" {
return defaultValue
}
return value
}
func getEnvRequired(key string) string {
value := os.Getenv(key)
if value == "" {
panic(fmt.Sprintf("required environment variable %s is not set", key))
}
return value
}
func getEnvAsInt(key string, defaultValue int) int {
valueStr := os.Getenv(key)
if valueStr == "" {
return defaultValue
}
value, err := strconv.Atoi(valueStr)
if err != nil {
return defaultValue
}
return value
}