feat: added API gateway
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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: getEnvRequired("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
|
||||
}
|
||||
Reference in New Issue
Block a user