1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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,
- }
- }
|