add client token of redis operation
This commit is contained in:
parent
0c09e7bd25
commit
a9532debe9
|
|
@ -31,3 +31,6 @@ var (
|
||||||
// ErrUnsupportedChannelPrefixType define error of unsupported channel prefix
|
// ErrUnsupportedChannelPrefixType define error of unsupported channel prefix
|
||||||
ErrUnsupportedChannelPrefixType = errors.New("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")
|
||||||
|
|
|
||||||
|
|
@ -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
|
// 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) {
|
func ParseAttrToken(ctx context.Context, tx *gorm.DB, attrToken, clientToken string) (model.AttrModelInterface, error) {
|
||||||
rs := diagram.NewRedisString(ctx, attrToken, "", 10, true)
|
rs := diagram.NewRedisString(ctx, attrToken, clientToken, 10, true)
|
||||||
|
|
||||||
attrSlice := strings.Split(attrToken, ".")
|
attrSlice := strings.Split(attrToken, ".")
|
||||||
attrLen := len(attrSlice)
|
attrLen := len(attrSlice)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package handler
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"modelRT/constants"
|
||||||
"modelRT/diagram"
|
"modelRT/diagram"
|
||||||
"modelRT/logger"
|
"modelRT/logger"
|
||||||
"modelRT/network"
|
"modelRT/network"
|
||||||
|
|
@ -13,6 +14,18 @@ import (
|
||||||
// AttrDeleteHandler deletes a data attribute
|
// AttrDeleteHandler deletes a data attribute
|
||||||
func AttrDeleteHandler(c *gin.Context) {
|
func AttrDeleteHandler(c *gin.Context) {
|
||||||
var request network.AttrDeleteRequest
|
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 {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal attribute delete request", "error", err)
|
logger.Error(c, "Failed to unmarshal attribute delete request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
|
|
@ -22,7 +35,7 @@ func AttrDeleteHandler(c *gin.Context) {
|
||||||
return
|
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 {
|
if err := rs.GETDEL(request.AttrToken); err != nil {
|
||||||
logger.Error(c, "Failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
|
logger.Error(c, "Failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package handler
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"modelRT/constants"
|
||||||
"modelRT/database"
|
"modelRT/database"
|
||||||
"modelRT/logger"
|
"modelRT/logger"
|
||||||
"modelRT/network"
|
"modelRT/network"
|
||||||
|
|
@ -13,6 +14,19 @@ import (
|
||||||
// AttrGetHandler retrieves the value of a data attribute
|
// AttrGetHandler retrieves the value of a data attribute
|
||||||
func AttrGetHandler(c *gin.Context) {
|
func AttrGetHandler(c *gin.Context) {
|
||||||
var request network.AttrGetRequest
|
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 {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal attribute get request", "error", err)
|
logger.Error(c, "Failed to unmarshal attribute get request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
|
|
@ -25,7 +39,7 @@ func AttrGetHandler(c *gin.Context) {
|
||||||
pgClient := database.GetPostgresDBClient()
|
pgClient := database.GetPostgresDBClient()
|
||||||
tx := pgClient.Begin()
|
tx := pgClient.Begin()
|
||||||
|
|
||||||
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken)
|
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken, clientToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
logger.Error(c, "Failed to parse attribute token", "attr_token", request.AttrToken, "error", err)
|
logger.Error(c, "Failed to parse attribute token", "attr_token", request.AttrToken, "error", err)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package handler
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"modelRT/constants"
|
||||||
"modelRT/diagram"
|
"modelRT/diagram"
|
||||||
"modelRT/logger"
|
"modelRT/logger"
|
||||||
"modelRT/network"
|
"modelRT/network"
|
||||||
|
|
@ -13,6 +14,19 @@ import (
|
||||||
// AttrSetHandler sets the value of a data attribute
|
// AttrSetHandler sets the value of a data attribute
|
||||||
func AttrSetHandler(c *gin.Context) {
|
func AttrSetHandler(c *gin.Context) {
|
||||||
var request network.AttrSetRequest
|
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 {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal attribute set request", "error", err)
|
logger.Error(c, "Failed to unmarshal attribute set request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
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
|
// 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 {
|
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)
|
logger.Error(c, "Failed to set attribute value in Redis", "attr_token", request.AttrToken, "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ package handler
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"modelRT/constants"
|
||||||
"modelRT/database"
|
"modelRT/database"
|
||||||
"modelRT/diagram"
|
"modelRT/diagram"
|
||||||
"modelRT/logger"
|
"modelRT/logger"
|
||||||
|
|
@ -15,22 +16,17 @@ import (
|
||||||
// MeasurementGetHandler retrieves the value of measurement data
|
// MeasurementGetHandler retrieves the value of measurement data
|
||||||
func MeasurementGetHandler(c *gin.Context) {
|
func MeasurementGetHandler(c *gin.Context) {
|
||||||
var request network.MeasurementGetRequest
|
var request network.MeasurementGetRequest
|
||||||
var clientToken string
|
|
||||||
|
|
||||||
// TODO 优化client_token获取
|
clientToken := c.GetString("client_token")
|
||||||
token, ok := c.Get("client_token")
|
if clientToken == "" {
|
||||||
if ok {
|
err := constants.ErrGetClientToken
|
||||||
// 将 token 断言为 ClientToken 类型
|
|
||||||
clientToken, isClientToken := token.(string)
|
logger.Error(c, "failed to get client token from context", "error", err)
|
||||||
if !isClientToken {
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
// TODO 优化相关报错输出
|
Code: http.StatusBadRequest,
|
||||||
c.JSON(http.StatusOK, gin.H{
|
Msg: err.Error(),
|
||||||
"message": "Request processed successfully",
|
})
|
||||||
"token": clientToken,
|
return
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
clientToken = token.(string)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&request); err != nil {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
|
@ -41,7 +37,7 @@ func MeasurementGetHandler(c *gin.Context) {
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// token 当前客户端的唯一标识(token),用于区分不同的客户端。
|
|
||||||
zset := diagram.NewRedisZSet(c, request.MeasurementToken, clientToken, 0, false)
|
zset := diagram.NewRedisZSet(c, request.MeasurementToken, clientToken, 0, false)
|
||||||
points, err := zset.ZRANGE(request.MeasurementToken, 0, -1)
|
points, err := zset.ZRANGE(request.MeasurementToken, 0, -1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue