biz-member-gateway/internal/svc/service_context.go

65 lines
1.8 KiB
Go

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(),
),
}
}