Files
juwan-backend/app/users/rpc/internal/svc/serviceContext.go
T
wwweww fdbcde13b2 add:
2026-02-23 20:36:21 +08:00

54 lines
1.4 KiB
Go

package svc
import (
"context"
"juwan-backend/app/users/rpc/internal/config"
"juwan-backend/app/users/rpc/internal/models"
"juwan-backend/app/users/rpc/internal/utils"
"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
JwtManager *utils.JwtManager
}
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~")
}
}
// Initialize JWT Manager
jwtManager := utils.NewJwtManager(redisCluster, c.Jwt.SecretKey, c.Jwt.Issuer)
return &ServiceContext{
Config: c,
UsersModel: models.NewUsersModel(conn, c.CacheConf),
RedisCluster: redisCluster,
JwtManager: jwtManager,
}
}