Rewrite variety score and suggestions with configurable scoring

- Add VarietyScoreConfig entity, repository, and V020 migration for
  per-household scoring weights and configurable tag types
- Rewrite getVarietyScore: tag-type repeats on consecutive days,
  non-staple ingredient overlaps, cooking log history, plan duplicates
- Rewrite getSuggestions: simulate variety score for each candidate,
  add tag filter (AND, case-insensitive) and configurable topN param
- Update SuggestionResponse to return simulatedScore instead of
  fitReasons/warnings, update VarietyScoreResponse to new shape
- Seed default VarietyScoreConfig on household creation
- Extend test suite across all domains (+270 tests, all passing)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-02 10:33:11 +02:00
parent 9ec703abcd
commit 8221a1fd41
21 changed files with 3225 additions and 110 deletions

View File

@@ -19,7 +19,8 @@ public interface PlanningService {
WeekPlanResponse confirmPlan(UUID householdId, UUID planId);
SuggestionResponse getSuggestions(UUID householdId, UUID planId, LocalDate slotDate);
SuggestionResponse getSuggestions(UUID householdId, UUID planId, LocalDate slotDate,
List<String> tagFilters, Integer topN);
VarietyScoreResponse getVarietyScore(UUID householdId, UUID planId);