48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
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,
|
|
}
|
|
}
|