Files
pay-bridge/backend/cmd/server/main.go
2026-03-13 15:51:59 +08:00

73 lines
1.6 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"log/slog"
"net/http"
"os"
"os/signal"
"syscall"
"time"
_ "pay-bridge/internal/channel/heepay" // 注册 HEEPay 渠道适配器
"pay-bridge/internal/api"
"pay-bridge/internal/app"
"pay-bridge/pkg/config"
"pay-bridge/pkg/logger"
)
func main() {
cfgFile := flag.String("config", "", "config file path (default: configs/config.local.yaml)")
flag.Parse()
cfg, err := config.Load(*cfgFile)
if err != nil {
fmt.Fprintf(os.Stderr, "load config failed: %v\n", err)
os.Exit(1)
}
logger.Init(cfg.Log.Level, cfg.Log.Format)
application, err := app.New(cfg)
if err != nil {
slog.Error("init application failed", "err", err)
os.Exit(1)
}
ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer cancel()
application.Start(ctx)
srv := &http.Server{
Addr: fmt.Sprintf(":%d", cfg.Server.Port),
Handler: api.SetupRouter(application),
ReadTimeout: cfg.Server.ReadTimeout,
WriteTimeout: cfg.Server.WriteTimeout,
}
go func() {
slog.Info("pay-bridge server started", "port", cfg.Server.Port)
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
slog.Error("server error", "err", err)
os.Exit(1)
}
}()
<-ctx.Done()
slog.Info("shutting down server...")
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 10*time.Second)
defer shutdownCancel()
if err := srv.Shutdown(shutdownCtx); err != nil {
slog.Error("server shutdown error", "err", err)
}
application.Shutdown(shutdownCtx)
slog.Info("server exited")
}