add client token of redis operation

This commit is contained in:
douxu 2025-09-16 15:50:22 +08:00
parent 0c09e7bd25
commit a9532debe9
6 changed files with 61 additions and 21 deletions

View File

@ -31,3 +31,6 @@ var (
// ErrUnsupportedChannelPrefixType define error of unsupported channel prefix
ErrUnsupportedChannelPrefixType = errors.New("unsupported channel prefix")
)
// ErrGetClientToken define error of can not get client_token from context
var ErrGetClientToken = errors.New("can not get client_token from context")

View File

@ -14,8 +14,8 @@ import (
)
// ParseAttrToken define return the attribute model interface based on the input attribute token. doc addr http://server.baseware.net:6875/books/product-design-docs/page/d6baf
func ParseAttrToken(ctx context.Context, tx *gorm.DB, attrToken string) (model.AttrModelInterface, error) {
rs := diagram.NewRedisString(ctx, attrToken, "", 10, true)
func ParseAttrToken(ctx context.Context, tx *gorm.DB, attrToken, clientToken string) (model.AttrModelInterface, error) {
rs := diagram.NewRedisString(ctx, attrToken, clientToken, 10, true)
attrSlice := strings.Split(attrToken, ".")
attrLen := len(attrSlice)

View File

@ -3,6 +3,7 @@ package handler
import (
"net/http"
"modelRT/constants"
"modelRT/diagram"
"modelRT/logger"
"modelRT/network"
@ -13,6 +14,18 @@ import (
// AttrDeleteHandler deletes a data attribute
func AttrDeleteHandler(c *gin.Context) {
var request network.AttrDeleteRequest
clientToken := c.GetString("client_token")
if clientToken == "" {
err := constants.ErrGetClientToken
logger.Error(c, "failed to get client token from context", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
Code: http.StatusBadRequest,
Msg: err.Error(),
})
return
}
if err := c.ShouldBindJSON(&request); err != nil {
logger.Error(c, "Failed to unmarshal attribute delete request", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
@ -22,7 +35,7 @@ func AttrDeleteHandler(c *gin.Context) {
return
}
rs := diagram.NewRedisString(c, request.AttrToken, "", 10, true)
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
if err := rs.GETDEL(request.AttrToken); err != nil {
logger.Error(c, "Failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
c.JSON(http.StatusOK, network.FailureResponse{

View File

@ -3,6 +3,7 @@ package handler
import (
"net/http"
"modelRT/constants"
"modelRT/database"
"modelRT/logger"
"modelRT/network"
@ -13,6 +14,19 @@ import (
// AttrGetHandler retrieves the value of a data attribute
func AttrGetHandler(c *gin.Context) {
var request network.AttrGetRequest
clientToken := c.GetString("client_token")
if clientToken == "" {
err := constants.ErrGetClientToken
logger.Error(c, "failed to get client token from context", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
Code: http.StatusBadRequest,
Msg: err.Error(),
})
return
}
if err := c.ShouldBindJSON(&request); err != nil {
logger.Error(c, "Failed to unmarshal attribute get request", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
@ -25,7 +39,7 @@ func AttrGetHandler(c *gin.Context) {
pgClient := database.GetPostgresDBClient()
tx := pgClient.Begin()
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken)
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken, clientToken)
if err != nil {
tx.Rollback()
logger.Error(c, "Failed to parse attribute token", "attr_token", request.AttrToken, "error", err)

View File

@ -3,6 +3,7 @@ package handler
import (
"net/http"
"modelRT/constants"
"modelRT/diagram"
"modelRT/logger"
"modelRT/network"
@ -13,6 +14,19 @@ import (
// AttrSetHandler sets the value of a data attribute
func AttrSetHandler(c *gin.Context) {
var request network.AttrSetRequest
clientToken := c.GetString("client_token")
if clientToken == "" {
err := constants.ErrGetClientToken
logger.Error(c, "failed to get client token from context", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
Code: http.StatusBadRequest,
Msg: err.Error(),
})
return
}
if err := c.ShouldBindJSON(&request); err != nil {
logger.Error(c, "Failed to unmarshal attribute set request", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
@ -23,7 +37,7 @@ func AttrSetHandler(c *gin.Context) {
}
// The logic for handling Redis operations directly from the handler
rs := diagram.NewRedisString(c, request.AttrToken, "", 10, true)
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
if err := rs.Set(request.AttrToken, request.AttrValue); err != nil {
logger.Error(c, "Failed to set attribute value in Redis", "attr_token", request.AttrToken, "error", err)
c.JSON(http.StatusOK, network.FailureResponse{

View File

@ -4,6 +4,7 @@ package handler
import (
"net/http"
"modelRT/constants"
"modelRT/database"
"modelRT/diagram"
"modelRT/logger"
@ -15,22 +16,17 @@ import (
// MeasurementGetHandler retrieves the value of measurement data
func MeasurementGetHandler(c *gin.Context) {
var request network.MeasurementGetRequest
var clientToken string
// TODO 优化client_token获取
token, ok := c.Get("client_token")
if ok {
// 将 token 断言为 ClientToken 类型
clientToken, isClientToken := token.(string)
if !isClientToken {
// TODO 优化相关报错输出
c.JSON(http.StatusOK, gin.H{
"message": "Request processed successfully",
"token": clientToken,
})
return
}
clientToken = token.(string)
clientToken := c.GetString("client_token")
if clientToken == "" {
err := constants.ErrGetClientToken
logger.Error(c, "failed to get client token from context", "error", err)
c.JSON(http.StatusOK, network.FailureResponse{
Code: http.StatusBadRequest,
Msg: err.Error(),
})
return
}
if err := c.ShouldBindJSON(&request); err != nil {
@ -41,7 +37,7 @@ func MeasurementGetHandler(c *gin.Context) {
})
return
}
// token 当前客户端的唯一标识token,用于区分不同的客户端。
zset := diagram.NewRedisZSet(c, request.MeasurementToken, clientToken, 0, false)
points, err := zset.ZRANGE(request.MeasurementToken, 0, -1)
if err != nil {