支持 颜色筛选

This commit is contained in:
2024-11-14 13:35:42 +08:00
parent 8c34739ccd
commit 4785fb9f8f

View File

@@ -409,6 +409,7 @@ func NewSchema(config Config) (graphql.Schema, error) {
}, },
}), }),
Args: graphql.FieldConfigArgument{ Args: graphql.FieldConfigArgument{
"color": &graphql.ArgumentConfig{Type: graphql.String, Description: "按主色调筛选图像, 使用十六进制颜色代码(#FF1414)"},
"explorer_id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定收藏夹的"}, "explorer_id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定收藏夹的"},
"collect_id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定收藏夹的"}, "collect_id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定收藏夹的"},
"collect": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定用户收藏过的"}, "collect": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定用户收藏过的"},
@@ -627,6 +628,53 @@ func NewSchema(config Config) (graphql.Schema, error) {
)) ))
} }
// 数据库中筛选: 按图像主色调颜色筛选
if p.Args["color"] != nil {
// 将 16 进制颜色转换为 RGB 三值
// hexToRGB 将十六进制颜色转换为 RGB
hexToRGB := func(hex string) (int, int, int, error) {
// 去掉 # 号
if strings.HasPrefix(hex, "#") {
hex = hex[1:]
}
// 检查是否是有效的十六进制颜色
if len(hex) != 6 {
return 0, 0, 0, fmt.Errorf("invalid hex color")
}
// 解析红色、绿色、蓝色通道的十六进制值
r, err := strconv.ParseInt(hex[:2], 16, 0)
if err != nil {
return 0, 0, 0, err
}
g, err := strconv.ParseInt(hex[2:4], 16, 0)
if err != nil {
return 0, 0, 0, err
}
b, err := strconv.ParseInt(hex[4:], 16, 0)
if err != nil {
return 0, 0, 0, err
}
return int(r), int(g), int(b), nil
}
r, g, b, err := hexToRGB(p.Args["color"].(string))
if err != nil {
fmt.Println("hexToRGB", err)
return nil, err
}
query = query.Where(goqu.Ex{
"web_images.color_r > ?": r - 10,
"web_images.color_r < ?": r + 10,
"web_images.color_g > ?": g - 10,
"web_images.color_g < ?": g + 10,
"web_images.color_b > ?": b - 10,
"web_images.color_b < ?": b + 10,
})
}
// 取所有数据的前N条 // 取所有数据的前N条
sql, _, _ := query.Where(goqu.Ex{"article_category_top_id": 22}).ToSQL() sql, _, _ := query.Where(goqu.Ex{"article_category_top_id": 22}).ToSQL()