2026-04-04 15:26:26 +08:00

40 lines
1.1 KiB
Go

package app
import (
"context"
"log/slog"
"gitea.haiyihy.com/hy/chatapppay/internal/config"
payservice "gitea.haiyihy.com/hy/chatapppay/internal/service/pay"
grpcserver "gitea.haiyihy.com/hy/chatapppay/internal/transport/grpc"
httpserver "gitea.haiyihy.com/hy/chatapppay/internal/transport/http"
"golang.org/x/sync/errgroup"
)
// Application 聚合支付服务的 HTTP 与 gRPC 服务。
type Application struct {
httpServer *httpserver.Server
grpcServer *grpcserver.Server
}
// New 构造支付服务应用。
func New(cfg config.Config, logger *slog.Logger) *Application {
payHandler := payservice.New()
return &Application{
httpServer: httpserver.New(cfg.App.Name, cfg.App.HTTPAddr, cfg.App.ShutdownTimeout, logger),
grpcServer: grpcserver.New(cfg.App.GRPCAddr, cfg.App.ShutdownTimeout, logger, payHandler),
}
}
// Run 并行启动 HTTP 与 gRPC 服务,收到取消信号后优雅停机。
func (a *Application) Run(ctx context.Context) error {
group, runCtx := errgroup.WithContext(ctx)
group.Go(func() error {
return a.httpServer.Run(runCtx)
})
group.Go(func() error {
return a.grpcServer.Run(runCtx)
})
return group.Wait()
}