mirror of https://github.com/stashapp/stash.git
176 lines
5.1 KiB
Go
176 lines
5.1 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"strconv"
|
|
)
|
|
|
|
type CriterionModifier string
|
|
|
|
const (
|
|
// =
|
|
CriterionModifierEquals CriterionModifier = "EQUALS"
|
|
// !=
|
|
CriterionModifierNotEquals CriterionModifier = "NOT_EQUALS"
|
|
// >
|
|
CriterionModifierGreaterThan CriterionModifier = "GREATER_THAN"
|
|
// <
|
|
CriterionModifierLessThan CriterionModifier = "LESS_THAN"
|
|
// IS NULL
|
|
CriterionModifierIsNull CriterionModifier = "IS_NULL"
|
|
// IS NOT NULL
|
|
CriterionModifierNotNull CriterionModifier = "NOT_NULL"
|
|
// INCLUDES ALL
|
|
CriterionModifierIncludesAll CriterionModifier = "INCLUDES_ALL"
|
|
CriterionModifierIncludes CriterionModifier = "INCLUDES"
|
|
CriterionModifierExcludes CriterionModifier = "EXCLUDES"
|
|
// MATCHES REGEX
|
|
CriterionModifierMatchesRegex CriterionModifier = "MATCHES_REGEX"
|
|
// NOT MATCHES REGEX
|
|
CriterionModifierNotMatchesRegex CriterionModifier = "NOT_MATCHES_REGEX"
|
|
// >= AND <=
|
|
CriterionModifierBetween CriterionModifier = "BETWEEN"
|
|
// < OR >
|
|
CriterionModifierNotBetween CriterionModifier = "NOT_BETWEEN"
|
|
)
|
|
|
|
var AllCriterionModifier = []CriterionModifier{
|
|
CriterionModifierEquals,
|
|
CriterionModifierNotEquals,
|
|
CriterionModifierGreaterThan,
|
|
CriterionModifierLessThan,
|
|
CriterionModifierIsNull,
|
|
CriterionModifierNotNull,
|
|
CriterionModifierIncludesAll,
|
|
CriterionModifierIncludes,
|
|
CriterionModifierExcludes,
|
|
CriterionModifierMatchesRegex,
|
|
CriterionModifierNotMatchesRegex,
|
|
CriterionModifierBetween,
|
|
CriterionModifierNotBetween,
|
|
}
|
|
|
|
func (e CriterionModifier) IsValid() bool {
|
|
switch e {
|
|
case CriterionModifierEquals, CriterionModifierNotEquals, CriterionModifierGreaterThan, CriterionModifierLessThan, CriterionModifierIsNull, CriterionModifierNotNull, CriterionModifierIncludesAll, CriterionModifierIncludes, CriterionModifierExcludes, CriterionModifierMatchesRegex, CriterionModifierNotMatchesRegex, CriterionModifierBetween, CriterionModifierNotBetween:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (e CriterionModifier) String() string {
|
|
return string(e)
|
|
}
|
|
|
|
func (e *CriterionModifier) UnmarshalGQL(v interface{}) error {
|
|
str, ok := v.(string)
|
|
if !ok {
|
|
return fmt.Errorf("enums must be strings")
|
|
}
|
|
|
|
*e = CriterionModifier(str)
|
|
if !e.IsValid() {
|
|
return fmt.Errorf("%s is not a valid CriterionModifier", str)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (e CriterionModifier) MarshalGQL(w io.Writer) {
|
|
fmt.Fprint(w, strconv.Quote(e.String()))
|
|
}
|
|
|
|
type StringCriterionInput struct {
|
|
Value string `json:"value"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
}
|
|
|
|
func (i StringCriterionInput) ValidModifier() bool {
|
|
switch i.Modifier {
|
|
case CriterionModifierEquals, CriterionModifierNotEquals, CriterionModifierIncludes, CriterionModifierExcludes, CriterionModifierMatchesRegex, CriterionModifierNotMatchesRegex,
|
|
CriterionModifierIsNull, CriterionModifierNotNull:
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
type IntCriterionInput struct {
|
|
Value int `json:"value"`
|
|
Value2 *int `json:"value2"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
}
|
|
|
|
func (i IntCriterionInput) ValidModifier() bool {
|
|
switch i.Modifier {
|
|
case CriterionModifierEquals, CriterionModifierNotEquals, CriterionModifierGreaterThan, CriterionModifierLessThan, CriterionModifierIsNull, CriterionModifierNotNull, CriterionModifierBetween, CriterionModifierNotBetween:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type FloatCriterionInput struct {
|
|
Value float64 `json:"value"`
|
|
Value2 *float64 `json:"value2"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
}
|
|
|
|
func (i FloatCriterionInput) ValidModifier() bool {
|
|
switch i.Modifier {
|
|
case CriterionModifierEquals, CriterionModifierNotEquals, CriterionModifierGreaterThan, CriterionModifierLessThan, CriterionModifierIsNull, CriterionModifierNotNull, CriterionModifierBetween, CriterionModifierNotBetween:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type ResolutionCriterionInput struct {
|
|
Value ResolutionEnum `json:"value"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
}
|
|
|
|
type HierarchicalMultiCriterionInput struct {
|
|
Value []string `json:"value"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
Depth *int `json:"depth"`
|
|
Excludes []string `json:"excludes"`
|
|
}
|
|
|
|
func (i HierarchicalMultiCriterionInput) CombineExcludes() HierarchicalMultiCriterionInput {
|
|
ii := i
|
|
if ii.Modifier == CriterionModifierExcludes {
|
|
ii.Modifier = CriterionModifierIncludesAll
|
|
ii.Excludes = append(ii.Excludes, ii.Value...)
|
|
ii.Value = nil
|
|
}
|
|
|
|
return ii
|
|
}
|
|
|
|
type MultiCriterionInput struct {
|
|
Value []string `json:"value"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
Excludes []string `json:"excludes"`
|
|
}
|
|
|
|
type DateCriterionInput struct {
|
|
Value string `json:"value"`
|
|
Value2 *string `json:"value2"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
}
|
|
|
|
type TimestampCriterionInput struct {
|
|
Value string `json:"value"`
|
|
Value2 *string `json:"value2"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
}
|
|
|
|
type PhashDistanceCriterionInput struct {
|
|
Value string `json:"value"`
|
|
Modifier CriterionModifier `json:"modifier"`
|
|
Distance *int `json:"distance"`
|
|
}
|
|
|
|
type OrientationCriterionInput struct {
|
|
Value []OrientationEnum `json:"value"`
|
|
}
|