feat(api): wire server configuration and dependencies
This commit is contained in:
68
backend/cmd/api/config.go
Normal file
68
backend/cmd/api/config.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type config struct {
|
||||
ServerAddr string
|
||||
FrontendOrigin string
|
||||
ZarinHubEndpoint string
|
||||
ZarinHubToken string
|
||||
ZarinHubTimeout time.Duration
|
||||
DatabasePath string
|
||||
}
|
||||
|
||||
func loadConfig() (config, error) {
|
||||
return readConfig(os.Getenv)
|
||||
}
|
||||
|
||||
func readConfig(getenv func(string) string) (config, error) {
|
||||
token := strings.TrimSpace(getenv("ZARINHUB_ACCESS_TOKEN"))
|
||||
if token == "" {
|
||||
return config{}, fmt.Errorf("ZARINHUB_ACCESS_TOKEN is required")
|
||||
}
|
||||
|
||||
timeoutText := valueOrDefault(
|
||||
getenv("ZARINHUB_TIMEOUT"),
|
||||
"5s",
|
||||
)
|
||||
timeout, err := time.ParseDuration(timeoutText)
|
||||
if err != nil || timeout <= 0 {
|
||||
return config{}, fmt.Errorf(
|
||||
"ZARINHUB_TIMEOUT must be a positive duration",
|
||||
)
|
||||
}
|
||||
|
||||
return config{
|
||||
ServerAddr: valueOrDefault(
|
||||
getenv("SERVER_ADDR"),
|
||||
"127.0.0.1:8080",
|
||||
),
|
||||
FrontendOrigin: valueOrDefault(
|
||||
getenv("FRONTEND_ORIGIN"),
|
||||
"http://127.0.0.1:3000",
|
||||
),
|
||||
ZarinHubEndpoint: valueOrDefault(
|
||||
getenv("ZARINHUB_ENDPOINT"),
|
||||
"https://zarin-hub.com/api/v5/KYC/CardToIban",
|
||||
),
|
||||
ZarinHubToken: token,
|
||||
ZarinHubTimeout: timeout,
|
||||
DatabasePath: valueOrDefault(
|
||||
getenv("DATABASE_PATH"),
|
||||
"./card-to-iban.db",
|
||||
),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func valueOrDefault(value string, fallback string) string {
|
||||
if strings.TrimSpace(value) == "" {
|
||||
return fallback
|
||||
}
|
||||
|
||||
return strings.TrimSpace(value)
|
||||
}
|
||||
Reference in New Issue
Block a user