package svc import ( "biz-member-gateway/internal/config" "biz-member-gateway/internal/middleware" "github.com/zeromicro/go-zero/core/limit" "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/zrpc" ers "code.30cm.net/digimon/library-go/errors" "code.30cm.net/digimon/library-go/errors/code" vi "code.30cm.net/digimon/library-go/validator" memberRPC "code.30cm.net/digimon/proto-all/pkg/member" notificationRPC "code.30cm.net/digimon/proto-all/pkg/notification" permissionRPC "code.30cm.net/digimon/proto-all/pkg/permission" ) type ServiceContext struct { Config config.Config AuthMiddleware rest.Middleware MemberRPC memberRPC.AccountClient TokenRPC permissionRPC.TokenServiceClient NotificationRPC notificationRPC.SenderServiceClient // 但是底線就是 redis 其他db 絕對不行 Redis *redis.Redis VerifyLimiter *limit.PeriodLimit Validate vi.Validate } func NewServiceContext(c config.Config) *ServiceContext { ers.Scope = code.CloudEPPortalGW tokenService := permissionRPC.NewTokenServiceClient(zrpc.MustNewClient(c.PermissionRPC).Conn()) InitPyroScope(c) // 啟動Redis newRedis, err := redis.NewRedis(c.RedisCfg) if err != nil { panic(err) } return &ServiceContext{ Config: c, AuthMiddleware: middleware.NewAuthMiddleware(middleware.AuthMiddlewareParam{ TokenRPC: tokenService, }).Handle, MemberRPC: memberRPC.NewAccountClient(zrpc.MustNewClient(c.MemberRPC).Conn()), TokenRPC: tokenService, NotificationRPC: notificationRPC.NewSenderServiceClient(zrpc.MustNewClient(c.NotificationRPC).Conn()), Redis: newRedis, Validate: vi.MustValidator( WithDecimalGt(), WithDecimalGte(), WithHTTPURL(), WithRfc3339Format(), ), } }