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

@@ -47,6 +47,8 @@ type ImageFilterType struct {
PerformerCount *IntCriterionInput `json:"performer_count"`
// Filter images that have performers that have been favorited
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
Galleries *MultiCriterionInput `json:"galleries"`
// 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, imagePerformerTagsCriterionHandler(qb, imageFilter.PerformerTags))
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.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 {
return &joinedPerformerTagsHandler{
criterion: tags,