this repo has no description
1package main
2
3import (
4 "context"
5 "os"
6 "os/signal"
7
8 "github.com/Tulkdan/payment-gateway/internal/providers"
9 "github.com/Tulkdan/payment-gateway/internal/service"
10 "github.com/Tulkdan/payment-gateway/internal/web"
11 "go.uber.org/zap"
12)
13
14func getEnv(key, defaultValue string) string {
15 if value := os.Getenv(key); value != "" {
16 return value
17 }
18 return defaultValue
19}
20
21func main() {
22 ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
23 defer stop()
24
25 logger, _ := zap.NewDevelopment()
26 defer logger.Sync()
27
28 providers := providers.NewUseProviders([]providers.Provider{
29 providers.NewBraintreeProvider(getEnv("BRAINTREE_URL", "http://localhost:8001"), logger),
30 providers.NewStripeProvider(getEnv("STRIPE_URL", "http://localhost:8002"), logger),
31 }, logger)
32 paymentsService := service.NewPaymentService(providers)
33
34 port := getEnv("PORT", "8000")
35 server := web.NewServer(paymentsService, port, logger)
36 server.ConfigureRouter()
37
38 srvErr := make(chan error, 1)
39 go func() {
40 logger.Info("Starting server", zap.String("port", port))
41 srvErr <- server.Start(ctx)
42 }()
43
44 select {
45 case <-srvErr:
46 return
47 case <-ctx.Done():
48 stop()
49 }
50
51 server.Shutdown()
52}