package main import ( "fmt" "os" "strings" "github.com/rs/zerolog/log" "prayertimes/internal/api" "prayertimes/internal/net" "prayertimes/pkg/citydb" "prayertimes/pkg/diyanetapi" "prayertimes/pkg/diyanetcalc" "prayertimes/pkg/diyanetprovider" ) func main() { if err := run(); err != nil { log.Fatal().Err(err).Msg("failed to run app") } } func run() error { port := getDefaultEnv("PORT", "8000") dbPath := strings.TrimSpace(getDefaultEnv("DB_PATH", "./prayertimes.sqlite3")) if dbPath == "" { return fmt.Errorf("DB_PATH is not set") } locationProvider, err := citydb.Open(dbPath) if err != nil { return fmt.Errorf("failed to open city database: %w", err) } defer locationProvider.Close() diyanetAPIProvider := diyanetapi.New(net.ReqClient) diyanetCalcProvider := diyanetcalc.New() prayerProvider := diyanetprovider.New(diyanetAPIProvider, diyanetCalcProvider) services := api.Services{ PrayerProvider: prayerProvider, LocationProvider: locationProvider, } app := api.New(services) if err := app.Listen(":" + port); err != nil { return fmt.Errorf("failed to listen on http port: %w", err) } return nil } func getDefaultEnv(name string, defaultValue string) string { v, ok := os.LookupEnv(name) if !ok { return defaultValue } return v }