service_context.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package svc
  2. import (
  3. "github.com/redis/go-redis/v9"
  4. "wechat-api/internal/config"
  5. "wechat-api/internal/middleware"
  6. "wechat-api/internal/pkg/wechat_ws"
  7. "github.com/suyuan32/simple-admin-core/rpc/coreclient"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. "wechat-api/ent"
  10. _ "wechat-api/ent/runtime"
  11. "github.com/casbin/casbin/v2"
  12. "github.com/zeromicro/go-zero/rest"
  13. "github.com/zeromicro/go-zero/zrpc"
  14. )
  15. type ServiceContext struct {
  16. Config config.Config
  17. Casbin *casbin.Enforcer
  18. Authority rest.Middleware
  19. Miniprogram rest.Middleware
  20. DB *ent.Client
  21. CoreRpc coreclient.Core
  22. Rds redis.UniversalClient
  23. WechatWs map[string]*wechat_ws.WechatWsClient
  24. }
  25. func NewServiceContext(c config.Config) *ServiceContext {
  26. rds := c.RedisConf.MustNewUniversalRedis()
  27. cbn := c.CasbinConf.MustNewCasbinWithOriginalRedisWatcher(c.CasbinDatabaseConf.Type, c.CasbinDatabaseConf.GetDSN(), c.RedisConf)
  28. db := ent.NewClient(
  29. ent.Log(logx.Info), // logger
  30. ent.Driver(c.DatabaseConf.NewNoCacheDriver()),
  31. ent.Debug(), // debug mode
  32. )
  33. coreRpc := coreclient.NewCore(zrpc.NewClientIfEnable(c.CoreRpc))
  34. // 初始化微信ws客户端
  35. // todo 现在配置是从 config.yaml中读取的,后续需要改成从数据库中读取,以便匹配不同的微信号
  36. var wsClients map[string]*wechat_ws.WechatWsClient
  37. for _, ws := range c.WeChatWs {
  38. client, err := wechat_ws.NewWechatWsClient(ws.Url, ws.Appid)
  39. if err != nil {
  40. logx.Error(err)
  41. continue
  42. }
  43. go client.WritePump()
  44. go client.ReadPump(nil)
  45. wsClients[ws.Appid] = client
  46. }
  47. return &ServiceContext{
  48. Config: c,
  49. Authority: middleware.NewAuthorityMiddleware(cbn, rds, coreRpc).Handle,
  50. Miniprogram: middleware.NewMiniprogramMiddleware(cbn, rds, coreRpc, c).Handle,
  51. DB: db,
  52. CoreRpc: coreRpc,
  53. Rds: rds,
  54. WechatWs: wsClients,
  55. }
  56. }