Implement lover relationship management features: Add endpoints for creating, acknowledging, and managing lover relationships in the FalukantController. Enhance backend models with RelationshipState for tracking relationship statuses. Update frontend components to display and manage lover details, including marriage satisfaction and household tension. Improve localization for new features in multiple languages.

This commit is contained in:
Torsten Schulz (local)
2026-03-20 11:37:46 +01:00
parent c7d33525ff
commit 2977b152a2
29 changed files with 4551 additions and 86 deletions

View File

@@ -0,0 +1,478 @@
# Falukant: Implementierungs-Backlog für Liebhaber, Mätressen, Ehezufriedenheit und Kinder aus Liebschaften
## Zweck
Dieses Backlog übersetzt die Fach- und Technikdokumente in konkrete Umsetzungspakete.
Grundlagen:
- [FALUKANT_LOVERS_CONCEPT.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_CONCEPT.md)
- [FALUKANT_LOVERS_DAEMON_SPEC.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_SPEC.md)
- [FALUKANT_LOVERS_TECHNICAL_CONCEPT.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_TECHNICAL_CONCEPT.md)
Das Backlog ist absichtlich in Reihenfolge angeordnet. Spätere Pakete bauen auf früheren auf.
## Rahmen
Nicht Teil der ersten Umsetzung:
- eigenes Dienerschaftssystem
- finales Balancing
- große Ereignisketten rund um Kirche, Gericht oder Hofintrigen
## Paket B1: Datenmodell vorbereiten
### Ziel
Die Datenbasis für Ehezufriedenheit, Liebschaftsstatus und Kinder aus Liebschaften anlegen.
### Aufgaben
1. Migration für `falukant_data.relationship_state` anlegen
2. Modell [relationship_state.js](/mnt/share/torsten/Programs/YourPart3/backend/models/falukant/data/relationship_state.js) anlegen
3. Associations in [associations.js](/mnt/share/torsten/Programs/YourPart3/backend/models/associations.js) ergänzen
4. `child_relation` um `legitimacy`, `birth_context`, `public_known` erweitern
5. Modell [child_relation.js](/mnt/share/torsten/Programs/YourPart3/backend/models/falukant/data/child_relation.js) anpassen
### Betroffene Dateien
- [backend/models/associations.js](/mnt/share/torsten/Programs/YourPart3/backend/models/associations.js)
- [backend/models/falukant/data/child_relation.js](/mnt/share/torsten/Programs/YourPart3/backend/models/falukant/data/child_relation.js)
- neue Migrationen in [backend/migrations](/mnt/share/torsten/Programs/YourPart3/backend/migrations)
- neue Datei [backend/models/falukant/data/relationship_state.js](/mnt/share/torsten/Programs/YourPart3/backend/models/falukant/data/relationship_state.js)
### Abhängigkeiten
- keine
### Done
- Datenbank kann die neuen Felder speichern
- Sequelize kann `Relationship` plus `state` laden
- `ChildRelation` kennt neue Legitimitätsfelder
## Paket B2: Backfill und Defaults
### Ziel
Bestehende Ehen und Liebschaften mit Startwerten versorgen.
### Aufgaben
1. Backfill-Migration oder Reparaturskript für bestehende `married`-Beziehungen
2. Backfill-Migration oder Reparaturskript für bestehende `lover`-Beziehungen
3. Fallback-Logik im Backend ergänzen, falls für alte Datensätze noch kein State existiert
### Betroffene Dateien
- neue Migration oder Tool in [backend/migrations](/mnt/share/torsten/Programs/YourPart3/backend/migrations) oder [backend/tools](/mnt/share/torsten/Programs/YourPart3/backend/tools)
- [backend/services/falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
### Abhängigkeiten
- B1
### Done
- alle alten `married`- und `lover`-Beziehungen haben nutzbare Zustandswerte
- Family-Lesezugriffe brechen nicht bei fehlendem State
## Paket B3: Family-Lesepfade erweitern
### Ziel
Die bestehenden API-Daten für Familie so erweitern, dass das Frontend sofort lesen und anzeigen kann.
### Aufgaben
1. `getFamily()` in [falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js) um `state`-Daten erweitern
2. für Ehebeziehungen `marriageSatisfaction` und `marriageState` liefern
3. für `lovers` Rollen-, Kosten-, Sichtbarkeits- und Risikofelder liefern
4. Hilfsmethoden für Standesgruppe und Vorschauwerte ergänzen
### Betroffene Dateien
- [backend/services/falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
### Abhängigkeiten
- B1
- B2
### Done
- `GET /api/falukant/family` liefert die neuen Datenfelder
- keine UI-Aktion nötig, aber Daten sind vollständig lesbar
## Paket B4: Family-UI lesend ausbauen
### Ziel
Die neuen Daten im Familienbereich sichtbar machen, ohne schon alle Interaktionen einzubauen.
### Aufgaben
1. Ehebereich in [FamilyView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/FamilyView.vue) um `Ehe-Zufriedenheit` ergänzen
2. `lovers`-Bereich mit Rolle, Sichtbarkeit, Diskretion, Unterhalt, Reputationseffekt und Eheeffekt erweitern
3. Kinderkennzeichnung für `legitimate`, `hidden_bastard`, `acknowledged_bastard` ergänzen
4. I18n-Schlüssel in den Falukant-Locales ergänzen
### Betroffene Dateien
- [frontend/src/views/falukant/FamilyView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/FamilyView.vue)
- [frontend/src/i18n/locales/de/falukant.json](/mnt/share/torsten/Programs/YourPart3/frontend/src/i18n/locales/de/falukant.json)
- [frontend/src/i18n/locales/en/falukant.json](/mnt/share/torsten/Programs/YourPart3/frontend/src/i18n/locales/en/falukant.json)
- [frontend/src/i18n/locales/es/falukant.json](/mnt/share/torsten/Programs/YourPart3/frontend/src/i18n/locales/es/falukant.json)
### Abhängigkeiten
- B3
### Done
- FamilyView zeigt neue Zustände lesbar an
- uneheliche Kinder sind UI-seitig unterscheidbar
## Paket B5: Berechnungslogik im Service kapseln
### Ziel
Alle Formeln in wiederverwendbare Backend-Helfer auslagern, bevor Daemon-Jobs gebaut werden.
### Aufgaben
1. `getRankGroup(...)` implementieren
2. `calculateLoverMonthlyCost(...)` implementieren
3. `calculateMarriageDelta(...)` implementieren
4. `calculateReputationDeltaFromLover(...)` implementieren
5. `calculateDailyVisibilityDelta(...)` und `calculateDailyDiscretionDelta(...)` implementieren
6. `calculateDailyScandalChance(...)` implementieren
7. `calculateMonthlyPregnancyChance(...)` implementieren
### Betroffene Dateien
- [backend/services/falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
### Abhängigkeiten
- B1
- B2
### Done
- Daemon-Jobs können auf zentrale Helper zugreifen
- keine Formel liegt verstreut in mehreren Jobs
## Paket B6: Daily-Tick-Übergabe an externen Daemon
### Ziel
Die tägliche Spiellogik so spezifizieren und übergeben, dass der externe Daemon sie korrekt ausführen kann.
### Aufgaben
1. Übergabedokument für den externen Daemon erstellen
2. Daily Input- und Output-Felder festlegen
3. Idempotenzanforderungen für `last_daily_processed_at` festlegen
4. Datenabhängigkeiten für Ehe, Liebschaften und Stand definieren
5. Benachrichtigungs- und Ereignisfolgen beschreiben
### Betroffene Dateien
- [docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
- [docs/FALUKANT_LOVERS_DAEMON_SPEC.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_SPEC.md)
### Abhängigkeiten
- B5
### Done
- der externe Daemon hat eine vollständige Daily-Tick-Übergabe
- Daily-Logik ist ohne Rückfragen implementierbar
## Paket B7: Monthly-Tick-Übergabe an externen Daemon
### Ziel
Die monatliche Spiellogik so spezifizieren und übergeben, dass der externe Daemon sie korrekt ausführen kann.
### Aufgaben
1. Monthly Input- und Output-Felder festlegen
2. Geldabbuchung und Moneyflow-Anforderungen beschreiben
3. Unterversorgung und Zustandsänderungen beschreiben
4. Kind-Erzeugung und Folgeeffekte beschreiben
5. Idempotenzanforderungen für `last_monthly_processed_at` festlegen
6. Transaktionsanforderungen definieren
### Betroffene Dateien
- [docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
- [docs/FALUKANT_LOVERS_DAEMON_SPEC.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_SPEC.md)
### Abhängigkeiten
- B5
### Done
- der externe Daemon hat eine vollständige Monthly-Tick-Übergabe
- Monatslogik ist ohne Rückfragen implementierbar
## Paket B8: Kinder aus Liebschaften technisch ermöglichen
### Ziel
Kinder aus aktiven Liebschaften erzeugen und korrekt markieren.
### Aufgaben
1. `createChildFromLoverRelationship(...)` implementieren
2. `processLoverBirths(...)` in den Monthly Tick integrieren
3. `ChildRelation` korrekt mit `birthContext = lover` anlegen
4. `legitimacy = hidden_bastard` als Startwert setzen
5. erste Folgeeffekte auf Ansehen und Ehezufriedenheit anwenden
### Betroffene Dateien
- [backend/services/falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
- [backend/models/falukant/data/child_relation.js](/mnt/share/torsten/Programs/YourPart3/backend/models/falukant/data/child_relation.js)
- [docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
### Abhängigkeiten
- B7
### Done
- Kinder aus Liebschaften können entstehen
- sie sind von legitimen Kindern technisch unterscheidbar
## Paket B9: Notifications und Folgeereignisse MVP
### Ziel
Die wichtigsten Ergebnisse für Spieler sichtbar machen.
### Aufgaben
1. Notifikationstypen für Kosten, Unterversorgung, Gerücht, Skandal und Kind ergänzen
2. Benachrichtigungstexte definieren
3. Daily- und Monthly-Tick an die Notification-Logik anbinden
### Betroffene Dateien
- [docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
- bestehende Notification-Modelle oder Services im Backend
- ggf. [frontend/src/views/falukant/OverviewView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/OverviewView.vue) indirekt, falls Benachrichtigungen dort auftauchen
### Abhängigkeiten
- B6
- B7
- B8
### Done
- Spieler sehen relevante Familienfolgen aktiv
## Paket B10: Lover-Aktionen im Backend
### Ziel
Interaktive Steuerung von Liebschaften serverseitig ermöglichen.
### Aufgaben
1. `setLoverMaintenance(...)`
2. `setLoverDiscretionMode(...)`
3. `acknowledgeLover(...)`
4. `endLoverRelationship(...)`
5. `giftLover(...)`
6. Router- und Controller-Anbindung
### Betroffene Dateien
- [backend/services/falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
- [backend/controllers/falukantController.js](/mnt/share/torsten/Programs/YourPart3/backend/controllers/falukantController.js)
- [backend/routers/falukantRouter.js](/mnt/share/torsten/Programs/YourPart3/backend/routers/falukantRouter.js)
### Abhängigkeiten
- B3
- B5
### Done
- Backend bietet alle Kernaktionen für Lovers an
## Paket B11: Lover-Aktionen im Frontend
### Ziel
Die neuen Interaktionen in `FamilyView` und ggf. Dialogen bedienbar machen.
### Aufgaben
1. Action-Buttons in [FamilyView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/FamilyView.vue) ergänzen
2. API-Aufrufe anbinden
3. Feedback- und Confirm-Dialoge integrieren
4. Zustandsänderungen direkt im UI sichtbar machen
### Betroffene Dateien
- [frontend/src/views/falukant/FamilyView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/FamilyView.vue)
- ggf. neue API-Helfer in `frontend/src/api`
### Abhängigkeiten
- B10
### Done
- Unterhalt, Anerkennung, Diskretion und Beenden sind im UI nutzbar
## Paket B12: Anerkennung unehelicher Kinder
### Ziel
Uneheliche Kinder später sichtbar anerkennen können.
### Aufgaben
1. Backend-Methode `acknowledgeLoverChild(...)`
2. Route und Controller
3. UI-Aktion im Familienbereich
4. direkte Folgeeffekte auf Ansehen und Ehe einbauen
### Betroffene Dateien
- [backend/services/falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
- [backend/controllers/falukantController.js](/mnt/share/torsten/Programs/YourPart3/backend/controllers/falukantController.js)
- [backend/routers/falukantRouter.js](/mnt/share/torsten/Programs/YourPart3/backend/routers/falukantRouter.js)
- [frontend/src/views/falukant/FamilyView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/FamilyView.vue)
### Abhängigkeiten
- B8
- B11
### Done
- uneheliche Kinder können anerkannt werden
- Status und Folgen ändern sich sichtbar
## Paket B13: Admin- und Testhilfen
### Ziel
Die neue Mechanik testbar und debugbar machen.
### Aufgaben
1. Admin- oder Tool-Zugriff auf `relationship_state`
2. Debug-Skript für `30 Tage simulieren`
3. Plausibilitätsprüfungen für fehlende States
4. Reparaturskript für inkonsistente Kinderdaten
### Betroffene Dateien
- [backend/tools](/mnt/share/torsten/Programs/YourPart3/backend/tools)
- ggf. [backend/services/adminService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/adminService.js)
- [docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
### Abhängigkeiten
- B6
- B7
- B8
### Done
- Entwickler können Systemzustände nachvollziehen und korrigieren
## Paket B14: QA und Balancing-Vorbereitung
### Ziel
Noch kein finales Balancing, aber die technische Basis für spätere Feinjustierung schaffen.
### Aufgaben
1. Konfigurationspunkte für Kosten- und Reputationswerte zentralisieren
2. Grundtests für Daily- und Monthly-Tick definieren
3. Testfälle für Standesgruppen definieren
4. Testfälle für weibliche und männliche Spielfiguren spiegeln
5. Testfälle für Kinder aus Liebschaften definieren
### Betroffene Dateien
- [docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
- ggf. Testverzeichnis im Backend
### Abhängigkeiten
- B6
- B7
- B8
### Done
- Werte sind zentral auffindbar
- spätere Balancing-Runden können auf Testfällen aufsetzen
## Empfohlene Reihenfolge
Für eine saubere erste Lieferung:
1. B1
2. B2
3. B3
4. B4
5. B5
6. B6
7. B7
8. B8
9. B9
10. B10
11. B11
12. B12
13. B13
14. B14
## MVP-Schnitt
Wenn eine erste spielbare Version schneller geliefert werden soll, reicht zunächst:
1. B1
2. B2
3. B3
4. B4
5. B5
6. B6
7. B7
8. B8
Damit wären bereits vorhanden:
- sichtbare Liebhaber-Details
- Ehezufriedenheit
- laufende Kosten
- laufende Ansehensänderung
- Kinder aus Liebschaften
Noch nicht enthalten im MVP:
- volle Interaktionssteuerung
- Anerkennung unehelicher Kinder
- Admin-Tools
- spätere Balancing-Infrastruktur
## Nächster konkreter Schritt
Wenn direkt implementiert werden soll, ist der erste technische Einstieg:
- B1 Datenmodell vorbereiten
Das ist der sauberste Startpunkt, weil danach alle weiteren Pakete darauf aufbauen können.