46 lines
1.6 KiB
Go
46 lines
1.6 KiB
Go
package clientapi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-admin-team/go-admin-core/sdk/pkg"
|
|
"go-admin/app/goauto/aimatching"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// resolveSpecs accepts only specification text, never a provider URL/key,
|
|
// prompt, raw order, address or account. It returns a suggestion, not an order.
|
|
func resolveSpecs(c *gin.Context) {
|
|
var req struct {
|
|
TargetColor string `json:"targetColor"`
|
|
TargetSize string `json:"targetSize"`
|
|
Colors []string `json:"colors"`
|
|
Sizes []string `json:"sizes"`
|
|
}
|
|
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 64<<10)
|
|
d := json.NewDecoder(c.Request.Body)
|
|
d.DisallowUnknownFields()
|
|
if d.Decode(&req) != nil || d.Decode(&struct{}{}) != io.EOF || len(req.Colors) > 200 || len(req.Sizes) > 200 {
|
|
c.JSON(422, gin.H{"code": 422, "message": "规格请求无效"})
|
|
return
|
|
}
|
|
for _, s := range append(append([]string{req.TargetColor, req.TargetSize}, req.Colors...), req.Sizes...) {
|
|
if len([]rune(s)) > 255 {
|
|
c.JSON(422, gin.H{"code": 422, "message": "规格值过长"})
|
|
return
|
|
}
|
|
}
|
|
db, err := pkg.GetOrm(c)
|
|
if err != nil {
|
|
c.JSON(503, gin.H{"code": 503})
|
|
return
|
|
}
|
|
v, err := aimatching.NewService(db).Resolve(c.Request.Context(), aimatching.MatchRequest{TargetColor: req.TargetColor, TargetSize: req.TargetSize, Colors: req.Colors, Sizes: req.Sizes})
|
|
if err != nil {
|
|
c.JSON(422, gin.H{"code": 422, "message": "未获得可靠匹配,请检查候选规格或联系管理员"})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"code": 200, "data": gin.H{"mappedColor": v.MappedColor, "mappedSize": v.MappedSize, "source": v.Source}})
|
|
}
|