add measurement recommend api
This commit is contained in:
parent
453e6f9851
commit
5d02ca9fca
|
|
@ -13,7 +13,7 @@ import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MeasurementGetHandler retrieves the value of measurement data
|
// MeasurementGetHandler define measurement query API
|
||||||
func MeasurementGetHandler(c *gin.Context) {
|
func MeasurementGetHandler(c *gin.Context) {
|
||||||
var request network.MeasurementGetRequest
|
var request network.MeasurementGetRequest
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
// Package handler provides HTTP handlers for various endpoints.
|
||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"modelRT/logger"
|
||||||
|
"modelRT/model"
|
||||||
|
"modelRT/network"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MeasurementRecommendHandler define measurement recommend API
|
||||||
|
func MeasurementRecommendHandler(c *gin.Context) {
|
||||||
|
var request network.MeasurementRecommendRequest
|
||||||
|
|
||||||
|
recommends, err := model.RedisSearchRecommend(c, request.Input)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error(c, "failed to get recommend data from redis", "input", request.Input, "error", err)
|
||||||
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
|
Code: http.StatusInternalServerError,
|
||||||
|
Msg: err.Error(),
|
||||||
|
PayLoad: map[string]interface{}{
|
||||||
|
"input": request.Input,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var minOffset int
|
||||||
|
for index, recommend := range recommends {
|
||||||
|
offset := model.GetLongestCommonPrefixLength(request.Input, recommend)
|
||||||
|
if index == 0 || offset < minOffset {
|
||||||
|
minOffset = offset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, network.SuccessResponse{
|
||||||
|
Code: http.StatusOK,
|
||||||
|
Msg: "success",
|
||||||
|
PayLoad: map[string]interface{}{
|
||||||
|
"input": request.Input,
|
||||||
|
"offset": minOffset,
|
||||||
|
"recommended_list": recommends,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -154,15 +154,15 @@ func getConstantsKeyByLength(inputLen int) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLongestCommonPrefixLength define func of get longest common prefix length between two strings
|
// GetLongestCommonPrefixLength define func of get longest common prefix length between two strings
|
||||||
func GetLongestCommonPrefixLength(s1 string, s2 string) int {
|
func GetLongestCommonPrefixLength(input string, recommendResult string) int {
|
||||||
// TODO 增加对特殊字符串例如 "" 的处理
|
if input == "" {
|
||||||
minLen := len(s1)
|
return 0
|
||||||
if len(s2) < minLen {
|
|
||||||
minLen = len(s2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < minLen; i++ {
|
minLen := min(len(input), len(recommendResult))
|
||||||
if s1[i] != s2[i] {
|
|
||||||
|
for i := range minLen {
|
||||||
|
if input[i] != recommendResult[i] {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6,3 +6,8 @@ type MeasurementGetRequest struct {
|
||||||
MeasurementID int64 `json:"measurement_id"`
|
MeasurementID int64 `json:"measurement_id"`
|
||||||
MeasurementToken string `json:"token"`
|
MeasurementToken string `json:"token"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MeasurementRecommendRequest defines the request payload for an measurement recommend
|
||||||
|
type MeasurementRecommendRequest struct {
|
||||||
|
Input string `json:"input"`
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,4 +13,5 @@ func registerMeasurementRoutes(rg *gin.RouterGroup, clientToken string) {
|
||||||
g := rg.Group("/measurement/")
|
g := rg.Group("/measurement/")
|
||||||
rg.Use(middleware.SetTokenMiddleware(clientToken))
|
rg.Use(middleware.SetTokenMiddleware(clientToken))
|
||||||
g.GET("load", handler.MeasurementGetHandler)
|
g.GET("load", handler.MeasurementGetHandler)
|
||||||
|
g.GET("recommend", handler.MeasurementRecommendHandler)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue