package svc import ( "github.com/redis/go-redis/v9" "wechat-api/internal/config" "wechat-api/internal/middleware" "wechat-api/internal/pkg/wechat_ws" "github.com/suyuan32/simple-admin-core/rpc/coreclient" "github.com/zeromicro/go-zero/core/logx" "wechat-api/ent" _ "wechat-api/ent/runtime" "github.com/casbin/casbin/v2" "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/zrpc" ) type ServiceContext struct { Config config.Config Casbin *casbin.Enforcer Authority rest.Middleware Miniprogram rest.Middleware DB *ent.Client CoreRpc coreclient.Core Rds redis.UniversalClient WechatWs map[string]*wechat_ws.WechatWsClient } func NewServiceContext(c config.Config) *ServiceContext { rds := c.RedisConf.MustNewUniversalRedis() cbn := c.CasbinConf.MustNewCasbinWithOriginalRedisWatcher(c.CasbinDatabaseConf.Type, c.CasbinDatabaseConf.GetDSN(), c.RedisConf) db := ent.NewClient( ent.Log(logx.Info), // logger ent.Driver(c.DatabaseConf.NewNoCacheDriver()), ent.Debug(), // debug mode ) coreRpc := coreclient.NewCore(zrpc.NewClientIfEnable(c.CoreRpc)) // 初始化微信ws客户端 // todo 现在配置是从 config.yaml中读取的,后续需要改成从数据库中读取,以便匹配不同的微信号 var wsClients map[string]*wechat_ws.WechatWsClient for _, ws := range c.WeChatWs { client, err := wechat_ws.NewWechatWsClient(ws.Url, ws.Appid) if err != nil { logx.Error(err) continue } go client.WritePump() go client.ReadPump(nil) wsClients[ws.Appid] = client } return &ServiceContext{ Config: c, Authority: middleware.NewAuthorityMiddleware(cbn, rds, coreRpc).Handle, Miniprogram: middleware.NewMiniprogramMiddleware(cbn, rds, coreRpc, c).Handle, DB: db, CoreRpc: coreRpc, Rds: rds, WechatWs: wsClients, } }