restore image performer age filter (#4601)

This commit is contained in:
dogwithakeyboard
2024-02-21 00:22:04 +00:00
committed by GitHub
parent 5bb9bf902c
commit 37acd6b79b
4 changed files with 22 additions and 0 deletions

View File

@@ -500,6 +500,8 @@ input ImageFilterType {
performer_count: IntCriterionInput performer_count: IntCriterionInput
"Filter images that have performers that have been favorited" "Filter images that have performers that have been favorited"
performer_favorite: Boolean performer_favorite: Boolean
"Filter images by performer age at time of image"
performer_age: IntCriterionInput
"Filter to only include images with these galleries" "Filter to only include images with these galleries"
galleries: MultiCriterionInput galleries: MultiCriterionInput
"Filter by creation time" "Filter by creation time"

View File

@@ -47,6 +47,8 @@ type ImageFilterType struct {
PerformerCount *IntCriterionInput `json:"performer_count"` PerformerCount *IntCriterionInput `json:"performer_count"`
// Filter images that have performers that have been favorited // Filter images that have performers that have been favorited
PerformerFavorite *bool `json:"performer_favorite"` PerformerFavorite *bool `json:"performer_favorite"`
// Filter images by performer age at time of image
PerformerAge *IntCriterionInput `json:"performer_age"`
// Filter to only include images with these galleries // Filter to only include images with these galleries
Galleries *MultiCriterionInput `json:"galleries"` Galleries *MultiCriterionInput `json:"galleries"`
// Filter by created at // Filter by created at

View File

@@ -720,6 +720,7 @@ func (qb *ImageStore) makeFilter(ctx context.Context, imageFilter *models.ImageF
query.handleCriterion(ctx, studioCriterionHandler(imageTable, imageFilter.Studios)) query.handleCriterion(ctx, studioCriterionHandler(imageTable, imageFilter.Studios))
query.handleCriterion(ctx, imagePerformerTagsCriterionHandler(qb, imageFilter.PerformerTags)) query.handleCriterion(ctx, imagePerformerTagsCriterionHandler(qb, imageFilter.PerformerTags))
query.handleCriterion(ctx, imagePerformerFavoriteCriterionHandler(imageFilter.PerformerFavorite)) query.handleCriterion(ctx, imagePerformerFavoriteCriterionHandler(imageFilter.PerformerFavorite))
query.handleCriterion(ctx, imagePerformerAgeCriterionHandler(imageFilter.PerformerAge))
query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.CreatedAt, "images.created_at")) query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.CreatedAt, "images.created_at"))
query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.UpdatedAt, "images.updated_at")) query.handleCriterion(ctx, timestampCriterionHandler(imageFilter.UpdatedAt, "images.updated_at"))
@@ -1025,6 +1026,22 @@ GROUP BY performers_images.image_id HAVING SUM(performers.favorite) = 0)`, "nofa
} }
} }
func imagePerformerAgeCriterionHandler(performerAge *models.IntCriterionInput) criterionHandlerFunc {
return func(ctx context.Context, f *filterBuilder) {
if performerAge != nil {
f.addInnerJoin("performers_images", "", "images.id = performers_images.image_id")
f.addInnerJoin("performers", "", "performers_images.performer_id = performers.id")
f.addWhere("images.date != '' AND performers.birthdate != ''")
f.addWhere("images.date IS NOT NULL AND performers.birthdate IS NOT NULL")
ageCalc := "cast(strftime('%Y.%m%d', images.date) - strftime('%Y.%m%d', performers.birthdate) as int)"
whereClause, args := getIntWhereClause(ageCalc, performerAge.Modifier, performerAge.Value, performerAge.Value2)
f.addWhere(whereClause, args...)
}
}
}
func imagePerformerTagsCriterionHandler(qb *ImageStore, tags *models.HierarchicalMultiCriterionInput) criterionHandler { func imagePerformerTagsCriterionHandler(qb *ImageStore, tags *models.HierarchicalMultiCriterionInput) criterionHandler {
return &joinedPerformerTagsHandler{ return &joinedPerformerTagsHandler{
criterion: tags, criterion: tags,

View File

@@ -52,6 +52,7 @@ const criterionOptions = [
PerformerTagsCriterionOption, PerformerTagsCriterionOption,
PerformersCriterionOption, PerformersCriterionOption,
createMandatoryNumberCriterionOption("performer_count"), createMandatoryNumberCriterionOption("performer_count"),
createMandatoryNumberCriterionOption("performer_age"),
PerformerFavoriteCriterionOption, PerformerFavoriteCriterionOption,
StudiosCriterionOption, StudiosCriterionOption,
createStringCriterionOption("url"), createStringCriterionOption("url"),