package svc import ( "context" "juwan-backend/app/users/rpc/internal/config" "juwan-backend/app/users/rpc/internal/models" "time" "github.com/redis/go-redis/v9" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/sqlx" ) type ServiceContext struct { Config config.Config UsersModel models.UsersModel RedisCluster *redis.ClusterClient } func NewServiceContext(c config.Config) *ServiceContext { conn := sqlx.NewSqlConn("postgres", c.DataSource) logx.Infof("success to connect to postgres~") // Initialize Redis Cluster client from CacheConf var redisCluster *redis.ClusterClient if len(c.CacheConf) > 0 { redisCluster = redis.NewClusterClient(&redis.ClusterOptions{ Addrs: []string{c.CacheConf[0].Host}, Password: c.CacheConf[0].Pass, }) // Test Redis Cluster connection ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := redisCluster.Ping(ctx).Err(); err != nil { logx.Errorf("failed to connect to redis cluster: %v", err) } else { logx.Infof("success to connect to redis cluster~") } } return &ServiceContext{ Config: c, UsersModel: models.NewUsersModel(conn, c.CacheConf), RedisCluster: redisCluster, } }