mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 04:44:37 +03:00
added details, deathdate, hair color, weight to performers and added details to studios (#1274)
* added details to performers and studios * added deathdate, hair_color and weight to performers * Simplify performer/studio create mutations * Add changelog and recategorised Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/stashapp/stash/pkg/models"
|
||||
)
|
||||
@@ -209,7 +208,13 @@ func (qb *performerQueryBuilder) Query(performerFilter *models.PerformerFilterTy
|
||||
}
|
||||
|
||||
if birthYear := performerFilter.BirthYear; birthYear != nil {
|
||||
clauses, thisArgs := getBirthYearFilterClause(birthYear.Modifier, birthYear.Value)
|
||||
clauses, thisArgs := getYearFilterClause(birthYear.Modifier, birthYear.Value, "birthdate")
|
||||
query.addWhere(clauses...)
|
||||
query.addArg(thisArgs...)
|
||||
}
|
||||
|
||||
if deathYear := performerFilter.DeathYear; deathYear != nil {
|
||||
clauses, thisArgs := getYearFilterClause(deathYear.Modifier, deathYear.Value, "death_date")
|
||||
query.addWhere(clauses...)
|
||||
query.addArg(thisArgs...)
|
||||
}
|
||||
@@ -254,6 +259,8 @@ func (qb *performerQueryBuilder) Query(performerFilter *models.PerformerFilterTy
|
||||
query.handleStringCriterionInput(performerFilter.CareerLength, tableName+".career_length")
|
||||
query.handleStringCriterionInput(performerFilter.Tattoos, tableName+".tattoos")
|
||||
query.handleStringCriterionInput(performerFilter.Piercings, tableName+".piercings")
|
||||
query.handleStringCriterionInput(performerFilter.HairColor, tableName+".hair_color")
|
||||
query.handleStringCriterionInput(performerFilter.Weight, tableName+".weight")
|
||||
query.handleStringCriterionInput(performerFilter.URL, tableName+".url")
|
||||
|
||||
// TODO - need better handling of aliases
|
||||
@@ -294,7 +301,7 @@ func (qb *performerQueryBuilder) Query(performerFilter *models.PerformerFilterTy
|
||||
return performers, countResult, nil
|
||||
}
|
||||
|
||||
func getBirthYearFilterClause(criterionModifier models.CriterionModifier, value int) ([]string, []interface{}) {
|
||||
func getYearFilterClause(criterionModifier models.CriterionModifier, value int, col string) ([]string, []interface{}) {
|
||||
var clauses []string
|
||||
var args []interface{}
|
||||
|
||||
@@ -306,22 +313,22 @@ func getBirthYearFilterClause(criterionModifier models.CriterionModifier, value
|
||||
switch modifier {
|
||||
case "EQUALS":
|
||||
// between yyyy-01-01 and yyyy-12-31
|
||||
clauses = append(clauses, "performers.birthdate >= ?")
|
||||
clauses = append(clauses, "performers.birthdate <= ?")
|
||||
clauses = append(clauses, "performers."+col+" >= ?")
|
||||
clauses = append(clauses, "performers."+col+" <= ?")
|
||||
args = append(args, startOfYear)
|
||||
args = append(args, endOfYear)
|
||||
case "NOT_EQUALS":
|
||||
// outside of yyyy-01-01 to yyyy-12-31
|
||||
clauses = append(clauses, "performers.birthdate < ? OR performers.birthdate > ?")
|
||||
clauses = append(clauses, "performers."+col+" < ? OR performers."+col+" > ?")
|
||||
args = append(args, startOfYear)
|
||||
args = append(args, endOfYear)
|
||||
case "GREATER_THAN":
|
||||
// > yyyy-12-31
|
||||
clauses = append(clauses, "performers.birthdate > ?")
|
||||
clauses = append(clauses, "performers."+col+" > ?")
|
||||
args = append(args, endOfYear)
|
||||
case "LESS_THAN":
|
||||
// < yyyy-01-01
|
||||
clauses = append(clauses, "performers.birthdate < ?")
|
||||
clauses = append(clauses, "performers."+col+" < ?")
|
||||
args = append(args, startOfYear)
|
||||
}
|
||||
}
|
||||
@@ -332,33 +339,23 @@ func getBirthYearFilterClause(criterionModifier models.CriterionModifier, value
|
||||
func getAgeFilterClause(criterionModifier models.CriterionModifier, value int) ([]string, []interface{}) {
|
||||
var clauses []string
|
||||
var args []interface{}
|
||||
var clause string
|
||||
|
||||
// get the date at which performer would turn the age specified
|
||||
dt := time.Now()
|
||||
birthDate := dt.AddDate(-value-1, 0, 0)
|
||||
yearAfter := birthDate.AddDate(1, 0, 0)
|
||||
if criterionModifier.IsValid() {
|
||||
switch criterionModifier {
|
||||
case models.CriterionModifierEquals:
|
||||
clause = " == ?"
|
||||
case models.CriterionModifierNotEquals:
|
||||
clause = " != ?"
|
||||
case models.CriterionModifierGreaterThan:
|
||||
clause = " > ?"
|
||||
case models.CriterionModifierLessThan:
|
||||
clause = " < ?"
|
||||
}
|
||||
|
||||
if modifier := criterionModifier.String(); criterionModifier.IsValid() {
|
||||
switch modifier {
|
||||
case "EQUALS":
|
||||
// between birthDate and yearAfter
|
||||
clauses = append(clauses, "performers.birthdate >= ?")
|
||||
clauses = append(clauses, "performers.birthdate < ?")
|
||||
args = append(args, birthDate)
|
||||
args = append(args, yearAfter)
|
||||
case "NOT_EQUALS":
|
||||
// outside of birthDate and yearAfter
|
||||
clauses = append(clauses, "performers.birthdate < ? OR performers.birthdate >= ?")
|
||||
args = append(args, birthDate)
|
||||
args = append(args, yearAfter)
|
||||
case "GREATER_THAN":
|
||||
// < birthDate
|
||||
clauses = append(clauses, "performers.birthdate < ?")
|
||||
args = append(args, birthDate)
|
||||
case "LESS_THAN":
|
||||
// > yearAfter
|
||||
clauses = append(clauses, "performers.birthdate >= ?")
|
||||
args = append(args, yearAfter)
|
||||
if clause != "" {
|
||||
clauses = append(clauses, "cast(IFNULL(strftime('%Y.%m%d', performers.death_date), strftime('%Y.%m%d', 'now')) - strftime('%Y.%m%d', performers.birthdate) as int)"+clause)
|
||||
args = append(args, value)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -214,10 +214,16 @@ func verifyPerformerAge(t *testing.T, ageCriterion models.IntCriterionInput) {
|
||||
|
||||
now := time.Now()
|
||||
for _, performer := range performers {
|
||||
cd := now
|
||||
|
||||
if performer.DeathDate.Valid {
|
||||
cd, _ = time.Parse("2006-01-02", performer.DeathDate.String)
|
||||
}
|
||||
|
||||
bd := performer.Birthdate.String
|
||||
d, _ := time.Parse("2006-01-02", bd)
|
||||
age := now.Year() - d.Year()
|
||||
if now.YearDay() < d.YearDay() {
|
||||
age := cd.Year() - d.Year()
|
||||
if cd.YearDay() < d.YearDay() {
|
||||
age = age - 1
|
||||
}
|
||||
|
||||
|
||||
@@ -558,10 +558,10 @@ func verifyInt(t *testing.T, value int, criterion models.IntCriterionInput) {
|
||||
assert.NotEqual(criterion.Value, value)
|
||||
}
|
||||
if criterion.Modifier == models.CriterionModifierGreaterThan {
|
||||
assert.True(value > criterion.Value)
|
||||
assert.Greater(value, criterion.Value)
|
||||
}
|
||||
if criterion.Modifier == models.CriterionModifierLessThan {
|
||||
assert.True(value < criterion.Value)
|
||||
assert.Less(value, criterion.Value)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -657,6 +657,19 @@ func getPerformerBirthdate(index int) string {
|
||||
return birthdate.Format("2006-01-02")
|
||||
}
|
||||
|
||||
func getPerformerDeathDate(index int) models.SQLiteDate {
|
||||
if index != 5 {
|
||||
return models.SQLiteDate{}
|
||||
}
|
||||
|
||||
deathDate := time.Now()
|
||||
deathDate = deathDate.AddDate(-index+1, -1, -1)
|
||||
return models.SQLiteDate{
|
||||
String: deathDate.Format("2006-01-02"),
|
||||
Valid: true,
|
||||
}
|
||||
}
|
||||
|
||||
func getPerformerCareerLength(index int) *string {
|
||||
if index%5 == 0 {
|
||||
return nil
|
||||
@@ -691,6 +704,8 @@ func createPerformers(pqb models.PerformerReaderWriter, n int, o int) error {
|
||||
String: getPerformerBirthdate(i),
|
||||
Valid: true,
|
||||
},
|
||||
DeathDate: getPerformerDeathDate(i),
|
||||
Details: sql.NullString{String: getPerformerStringValue(i, "Details"), Valid: true},
|
||||
}
|
||||
|
||||
careerLength := getPerformerCareerLength(i)
|
||||
|
||||
Reference in New Issue
Block a user