mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 08:26:00 +01:00
Fix custom field numbers not filtering correctly (#5685)
This commit is contained in:
parent
f65976cf4d
commit
f23450c380
2 changed files with 33 additions and 1 deletions
|
|
@ -3,9 +3,11 @@ package api
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/stashapp/stash/pkg/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
// JSONNumberToNumber converts a JSON number to either a float64 or int64.
|
// jsonNumberToNumber converts a JSON number to either a float64 or int64.
|
||||||
func jsonNumberToNumber(n json.Number) interface{} {
|
func jsonNumberToNumber(n json.Number) interface{} {
|
||||||
if strings.Contains(string(n), ".") {
|
if strings.Contains(string(n), ".") {
|
||||||
f, _ := n.Float64()
|
f, _ := n.Float64()
|
||||||
|
|
@ -15,6 +17,15 @@ func jsonNumberToNumber(n json.Number) interface{} {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// anyJSONNumberToNumber converts a JSON number using jsonNumberToNumber, otherwise it returns the existing value
|
||||||
|
func anyJSONNumberToNumber(v any) any {
|
||||||
|
if n, ok := v.(json.Number); ok {
|
||||||
|
return jsonNumberToNumber(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
// ConvertMapJSONNumbers converts all JSON numbers in a map to either float64 or int64.
|
// ConvertMapJSONNumbers converts all JSON numbers in a map to either float64 or int64.
|
||||||
func convertMapJSONNumbers(m map[string]interface{}) (ret map[string]interface{}) {
|
func convertMapJSONNumbers(m map[string]interface{}) (ret map[string]interface{}) {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
|
|
@ -34,3 +45,21 @@ func convertMapJSONNumbers(m map[string]interface{}) (ret map[string]interface{}
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func convertCustomFieldCriterionValues(c models.CustomFieldCriterionInput) models.CustomFieldCriterionInput {
|
||||||
|
nv := make([]any, len(c.Value))
|
||||||
|
for i, v := range c.Value {
|
||||||
|
nv[i] = anyJSONNumberToNumber(v)
|
||||||
|
}
|
||||||
|
c.Value = nv
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertCustomFieldCriterionInputJSONNumbers(c []models.CustomFieldCriterionInput) []models.CustomFieldCriterionInput {
|
||||||
|
ret := make([]models.CustomFieldCriterionInput, len(c))
|
||||||
|
for i, v := range c {
|
||||||
|
ret[i] = convertCustomFieldCriterionValues(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,9 @@ func (r *queryResolver) FindPerformers(ctx context.Context, performerFilter *mod
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #5682 - convert JSON numbers to float64 or int64
|
||||||
|
performerFilter.CustomFields = convertCustomFieldCriterionInputJSONNumbers(performerFilter.CustomFields)
|
||||||
|
|
||||||
if err := r.withReadTxn(ctx, func(ctx context.Context) error {
|
if err := r.withReadTxn(ctx, func(ctx context.Context) error {
|
||||||
var performers []*models.Performer
|
var performers []*models.Performer
|
||||||
var err error
|
var err error
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue