Ein kleines Update: Ich warte derzeit noch auf einen Bugfix im Bereich Frontend, habe aber für das Backend zu verkünden:

Neu dazu gekommen: Ein PhysicalAttribute Scorer.
Neben dem, was SD oder SB sich an den Rahmenbedingungen des Arrangements vorstellen können (Entfernung, Exklusivität (beidseitig oder auch nur einseitig), ...) fallen nun auch Größe (min,max, nullable), Gewicht (min,max,nullable), Fitness-Level und mehr ins Gewicht.
Dies werde ich in der nächsten Zeit noch um andere Profanitäten ergänzen.
Derzeit ist es so gestaltet, dass ich z.B. konkret nach Frauen suchen kann, die unbedingt kleiner sind als ich. Oder mir ist das nicht so sehr wichtig, aber ein gesunder BMI ist mir wichtig.
Die AI war so freundlich, aus den Test-Cases folgende lesbare Zusammenfassung zu erstellen:
PhysicalAttributesScorer (0-40 points)
Evaluates the compatibility of physical attributes between model and client based on their preferences.
Scoring Logic:
The scorer evaluates both directions (model's attributes vs client's preferences and vice versa):
- 5 points per attribute: Height is within desired range
- 5 points per attribute: Weight is within desired range
- 5 points per attribute: BMI is within desired range
- 5 points per attribute: Fitness level meets or exceeds expectations
- 3 points: Fitness level is related/similar to expected range
- 0 points: Attribute doesn't match or no data available when preference exists
Maximum 20 points per person, thus maximum 40 points total
Important: "No Preference" vs "No Data"
The scorer distinguishes between three scenarios:
- No Preference Set (e.g., min_height = null AND max_height = null)
- Attribute is not scored at all (neutral, doesn't affect total)
- This is intentional: not everyone cares about every attribute
- Preference Set + Data Available + Match
- If match: +5 points for exact attributes (height, weight, BMI)
- If within range or higher: +5 points for fitness level
- If related fitness level: +3 points
- Preference Set + No Data Available OR No Match
- 0 points (either we can't verify it, or it doesn't match)
Example: If a search profile sets min_height = 170 but not min_weight, then:
- Height will be scored (5 points if match, 0 if not)
- Weight will be ignored (0 points, but not a negative - just not considered)
Fitness Level Scoring (Nuanced)
Similar to education levels, fitness levels are scored with nuance:
- 5 points: Fitness level is within desired range (min to max)
- 5 points: Fitness level is higher than maximum (better than expected)
- 3 points: Fitness level is related/similar to expected range
- 0 points: Fitness level is below minimum, doesn't match, or no preference/data
Fitness Level Hierarchy:
- SEDENTARY (lowest)
- LOW
- MEDIUM
- HIGH
- VERY_HIGH
- ATHLETIC (highest)
Related Levels (receive 3 points):
- SEDENTARY ↔ LOW
- LOW ↔ SEDENTARY, MEDIUM
- MEDIUM ↔ LOW, HIGH
- HIGH ↔ MEDIUM, VERY_HIGH
- VERY_HIGH ↔ HIGH, ATHLETIC
- ATHLETIC ↔ VERY_HIGH
Physical Attributes in Search Profiles
Search profiles support the following physical attribute ranges:
- Height: min_height to max_height (in cm)
- Weight: min_weight to max_weight (in kg)
- BMI: min_bmi to max_bmi (calculated automatically from height/weight)
- Fitness Level: min_fitness_level to max_fitness_level
All attributes are nullable - if not specified in the search profile, no scoring is applied for that attribute.
Examples:
Example 1: Perfect Physical Match (Both Directions)
- Client wants: Height 165-175cm, Weight 55-65kg, Fitness: MEDIUM-HIGH
- Model has: Height 170cm, Weight 60kg, Fitness: HIGH
- Model's evaluation: Height ✓ (5) + Weight ✓ (5) + Fitness ✓ (5) = 15 points
- Model wants: Height 175-185cm, Weight 70-80kg, Fitness: HIGH-ATHLETIC
- Client has: Height 180cm, Weight 75kg, Fitness: ATHLETIC
- Client's evaluation: Height ✓ (5) + Weight ✓ (5) + Fitness ✓ (5) = 15 points
- Total: 30 points (both match all specified attributes)
Example 2: Partial Match with Missing Data
- Client wants: Height 160-180cm, Weight 50-70kg, Fitness: HIGH-ATHLETIC
- Model has: Height 175cm (matches), Weight: not set, Fitness: MEDIUM (related to HIGH)
- Result: 5 (height) + 0 (no weight data) + 3 (fitness related) = 8 points for model
Example 3: No Preference = Not Scored
- Client has NO physical preferences set (all null)
- Model has: Height 170cm, Weight 60kg, Fitness: HIGH
- Result: 0 points (not because it's bad, but because client doesn't care about these attributes)
Example 4: Exceeds Expectations
- Model wants: Fitness: MEDIUM-HIGH
- Client has: Fitness: ATHLETIC (higher than max)
- Result: 5 points (better than expected is still good)
Example 5: Preference Set but No Data
- Client wants: Height 170-185cm
- Model has: Height not set (null)
- Result: 0 points (client cares about height, but we can't verify it)
Example 6: Outside Range
- Client wants: Height 170-185cm
- Model has: Height 160cm (below minimum)
- Result: 0 points (doesn't meet the requirement)
Example 7: Mixed Attributes
- Client wants: Height 165-175cm, Fitness: HIGH-ATHLETIC (no weight/BMI preference)
- Model has: Height 170cm (matches), Weight 60kg (no preference set), Fitness: MEDIUM (related to HIGH)
- Result: 5 (height) + 0 (weight not requested) + 3 (fitness related) = 8 points
BMI Calculation
BMI is automatically calculated from height and weight:
- Formula: BMI = weight (kg) / (height (m))²
- If height or weight is missing, BMI is null
- BMI preferences in search profiles are optional and independent of height/weight preferences
- You can set BMI preferences without setting height/weight preferences (and vice versa)
Important: The BMI preference is evaluated independently. If you set both height/weight ranges AND BMI range, all three must match to get full points for each.