add measurement recommend api
This commit is contained in:
parent
453e6f9851
commit
5d02ca9fca
|
|
@ -13,7 +13,7 @@ import (
|
|||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// MeasurementGetHandler retrieves the value of measurement data
|
||||
// MeasurementGetHandler define measurement query API
|
||||
func MeasurementGetHandler(c *gin.Context) {
|
||||
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
|
||||
func GetLongestCommonPrefixLength(s1 string, s2 string) int {
|
||||
// TODO 增加对特殊字符串例如 "" 的处理
|
||||
minLen := len(s1)
|
||||
if len(s2) < minLen {
|
||||
minLen = len(s2)
|
||||
func GetLongestCommonPrefixLength(input string, recommendResult string) int {
|
||||
if input == "" {
|
||||
return 0
|
||||
}
|
||||
|
||||
for i := 0; i < minLen; i++ {
|
||||
if s1[i] != s2[i] {
|
||||
minLen := min(len(input), len(recommendResult))
|
||||
|
||||
for i := range minLen {
|
||||
if input[i] != recommendResult[i] {
|
||||
return i
|
||||
}
|
||||
}
|
||||
|
|
@ -6,3 +6,8 @@ type MeasurementGetRequest struct {
|
|||
MeasurementID int64 `json:"measurement_id"`
|
||||
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/")
|
||||
rg.Use(middleware.SetTokenMiddleware(clientToken))
|
||||
g.GET("load", handler.MeasurementGetHandler)
|
||||
g.GET("recommend", handler.MeasurementRecommendHandler)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue