add: anowflake email kafka, refa: redis connectg

This commit is contained in:
wwweww
2026-02-25 01:16:13 +08:00
parent fdbcde13b2
commit 300058ad01
67 changed files with 3596 additions and 139 deletions
+7 -2
View File
@@ -13,6 +13,11 @@ type JwtConfig struct {
type Config struct {
zrpc.RpcServerConf
DataSource string `json:"dataSource"`
CacheConf cache.CacheConf
Jwt JwtConfig `json:"jwt"`
DB struct {
Master string
Slave string
}
CacheConf cache.CacheConf
Jwt JwtConfig `json:"jwt"`
SnowflakeRpcConf zrpc.RpcClientConf
}
@@ -25,9 +25,7 @@ func NewGetUserByUsernameLogic(ctx context.Context, svcCtx *svc.ServiceContext)
}
func (l *GetUserByUsernameLogic) GetUserByUsername(in *pb.GetUserByUsernameReq) (*pb.GetUserByUsernameResp, error) {
// todo: add your logic here and delete this line
user, err := l.svcCtx.UsersModel.FindOneByUsername(l.ctx, in.Username)
user, err := l.svcCtx.UsersModelRO.FindOneByUsername(l.ctx, in.Username)
pbUsers := &pb.Users{}
converter.StructToStruct(user, pbUsers)
if err == nil || user != nil {
@@ -5,6 +5,7 @@ import (
"juwan-backend/app/users/rpc/internal/svc"
"juwan-backend/app/users/rpc/pb"
"juwan-backend/common/converter"
"github.com/zeromicro/go-zero/core/logx"
)
@@ -25,6 +26,12 @@ func NewGetUsersByIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetU
func (l *GetUsersByIdLogic) GetUsersById(in *pb.GetUsersByIdReq) (*pb.GetUsersByIdResp, error) {
// todo: add your logic here and delete this line
user, err := l.svcCtx.UsersModelRO.FindOne(l.ctx, in.Id)
if err != nil {
return nil, err
}
pbUser := &pb.Users{}
converter.StructToStruct(&user, &pbUser)
return &pb.GetUsersByIdResp{}, nil
return &pb.GetUsersByIdResp{Users: pbUser}, nil
}
@@ -32,11 +32,11 @@ var (
type (
usersModel interface {
Insert(ctx context.Context, data *Users) (sql.Result, error)
FindOne(ctx context.Context, userId string) (*Users, error)
FindOne(ctx context.Context, userId int64) (*Users, error)
FindOneByPhone(ctx context.Context, phone string) (*Users, error)
FindOneByUsername(ctx context.Context, username string) (*Users, error)
Update(ctx context.Context, data *Users) error
Delete(ctx context.Context, userId string) error
Delete(ctx context.Context, userId int64) error
}
defaultUsersModel struct {
@@ -45,7 +45,7 @@ type (
}
Users struct {
UserId string `db:"user_id"`
UserId int64 `db:"user_id"`
Username string `db:"username"`
Passwd string `db:"passwd"`
Nickname string `db:"nickname"`
@@ -66,7 +66,7 @@ func newUsersModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *
}
}
func (m *defaultUsersModel) Delete(ctx context.Context, userId string) error {
func (m *defaultUsersModel) Delete(ctx context.Context, userId int64) error {
data, err := m.FindOne(ctx, userId)
if err != nil {
return err
@@ -82,7 +82,7 @@ func (m *defaultUsersModel) Delete(ctx context.Context, userId string) error {
return err
}
func (m *defaultUsersModel) FindOne(ctx context.Context, userId string) (*Users, error) {
func (m *defaultUsersModel) FindOne(ctx context.Context, userId int64) (*Users, error) {
publicUsersUserIdKey := fmt.Sprintf("%s%v", cachePublicUsersUserIdPrefix, userId)
var resp Users
err := m.QueryRowCtx(ctx, &resp, publicUsersUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
+20 -16
View File
@@ -1,10 +1,12 @@
package svc
import (
"context"
"juwan-backend/app/snowflake/rpc/snowflake"
"juwan-backend/app/users/rpc/internal/config"
"juwan-backend/app/users/rpc/internal/models"
"juwan-backend/app/users/rpc/internal/utils"
"juwan-backend/common/redisx"
"juwan-backend/common/snowflakex"
"time"
"github.com/redis/go-redis/v9"
@@ -14,30 +16,30 @@ import (
type ServiceContext struct {
Config config.Config
UsersModel models.UsersModel
UsersModelRW models.UsersModel
UsersModelRO models.UsersModel
RedisCluster *redis.ClusterClient
Snowflake snowflake.SnowflakeServiceClient
JwtManager *utils.JwtManager
}
func NewServiceContext(c config.Config) *ServiceContext {
conn := sqlx.NewSqlConn("postgres", c.DataSource)
RWDBConn := sqlx.NewSqlConn("postgres", c.DB.Master)
RODBConn := sqlx.NewSqlConn("postgres", c.DB.Slave)
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 {
redisConn, err := redisx.ConnectMasterSlaveCluster(c.CacheConf, 5*time.Second)
redisCluster := redisConn.Client
if redisCluster != nil {
if err != nil {
logx.Errorf("failed to connect to redis cluster: %v", err)
} else {
logx.Infof("success to connect to redis cluster~")
if redisConn.HasSlave {
logx.Infof("success to connect to redis master/slave (M: %s, S: %s)", redisConn.MasterHost, redisConn.SlaveHost)
} else {
logx.Infof("success to connect to redis master (M: %s), slave not configured", redisConn.MasterHost)
}
}
}
@@ -46,8 +48,10 @@ func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
UsersModel: models.NewUsersModel(conn, c.CacheConf),
UsersModelRW: models.NewUsersModel(RWDBConn, c.CacheConf),
UsersModelRO: models.NewUsersModel(RODBConn, c.CacheConf),
RedisCluster: redisCluster,
JwtManager: jwtManager,
Snowflake: snowflakex.NewClient(c.SnowflakeRpcConf),
}
}