mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Change performer height to be numeric (#3060)
* Make height an int. Add height_cm field * Change UI to use height_cm * Use number fields for height/weight * Add migration note
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/doug-martin/goqu/v9"
|
||||
@@ -33,7 +34,7 @@ type performerRow struct {
|
||||
Ethnicity zero.String `db:"ethnicity"`
|
||||
Country zero.String `db:"country"`
|
||||
EyeColor zero.String `db:"eye_color"`
|
||||
Height zero.String `db:"height"`
|
||||
Height null.Int `db:"height"`
|
||||
Measurements zero.String `db:"measurements"`
|
||||
FakeTits zero.String `db:"fake_tits"`
|
||||
CareerLength zero.String `db:"career_length"`
|
||||
@@ -67,7 +68,7 @@ func (r *performerRow) fromPerformer(o models.Performer) {
|
||||
r.Ethnicity = zero.StringFrom(o.Ethnicity)
|
||||
r.Country = zero.StringFrom(o.Country)
|
||||
r.EyeColor = zero.StringFrom(o.EyeColor)
|
||||
r.Height = zero.StringFrom(o.Height)
|
||||
r.Height = intFromPtr(o.Height)
|
||||
r.Measurements = zero.StringFrom(o.Measurements)
|
||||
r.FakeTits = zero.StringFrom(o.FakeTits)
|
||||
r.CareerLength = zero.StringFrom(o.CareerLength)
|
||||
@@ -100,7 +101,7 @@ func (r *performerRow) resolve() *models.Performer {
|
||||
Ethnicity: r.Ethnicity.String,
|
||||
Country: r.Country.String,
|
||||
EyeColor: r.EyeColor.String,
|
||||
Height: r.Height.String,
|
||||
Height: nullIntPtr(r.Height),
|
||||
Measurements: r.Measurements.String,
|
||||
FakeTits: r.FakeTits.String,
|
||||
CareerLength: r.CareerLength.String,
|
||||
@@ -136,7 +137,7 @@ func (r *performerRowRecord) fromPartial(o models.PerformerPartial) {
|
||||
r.setNullString("ethnicity", o.Ethnicity)
|
||||
r.setNullString("country", o.Country)
|
||||
r.setNullString("eye_color", o.EyeColor)
|
||||
r.setNullString("height", o.Height)
|
||||
r.setNullInt("height", o.Height)
|
||||
r.setNullString("measurements", o.Measurements)
|
||||
r.setNullString("fake_tits", o.FakeTits)
|
||||
r.setNullString("career_length", o.CareerLength)
|
||||
@@ -445,6 +446,22 @@ func (qb *PerformerStore) validateFilter(filter *models.PerformerFilterType) err
|
||||
return qb.validateFilter(filter.Not)
|
||||
}
|
||||
|
||||
// if legacy height filter used, ensure only supported modifiers are used
|
||||
if filter.Height != nil {
|
||||
// treat as an int filter
|
||||
intCrit := &models.IntCriterionInput{
|
||||
Modifier: filter.Height.Modifier,
|
||||
}
|
||||
if !intCrit.ValidModifier() {
|
||||
return fmt.Errorf("invalid height modifier: %s", filter.Height.Modifier)
|
||||
}
|
||||
|
||||
// ensure value is a valid number
|
||||
if _, err := strconv.Atoi(filter.Height.Value); err != nil {
|
||||
return fmt.Errorf("invalid height value: %s", filter.Height.Value)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -483,7 +500,19 @@ func (qb *PerformerStore) makeFilter(ctx context.Context, filter *models.Perform
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.Ethnicity, tableName+".ethnicity"))
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.Country, tableName+".country"))
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.EyeColor, tableName+".eye_color"))
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.Height, tableName+".height"))
|
||||
|
||||
// special handler for legacy height filter
|
||||
heightCmCrit := filter.HeightCm
|
||||
if heightCmCrit == nil && filter.Height != nil {
|
||||
heightCm, _ := strconv.Atoi(filter.Height.Value) // already validated
|
||||
heightCmCrit = &models.IntCriterionInput{
|
||||
Value: heightCm,
|
||||
Modifier: filter.Height.Modifier,
|
||||
}
|
||||
}
|
||||
|
||||
query.handleCriterion(ctx, intCriterionHandler(heightCmCrit, tableName+".height", nil))
|
||||
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.Measurements, tableName+".measurements"))
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.FakeTits, tableName+".fake_tits"))
|
||||
query.handleCriterion(ctx, stringCriterionHandler(filter.CareerLength, tableName+".career_length"))
|
||||
|
||||
Reference in New Issue
Block a user