Datenbank-Migrationen (Falukant / YpDaemon)
Siehe auch docs/FALUKANT_DAEMON_HANDOFF.md (Abgleich mit Backend-Übergabe).
001_falukant_family_lovers.sql
Voraussetzung für den FalukantFamilyWorker (Liebhaber, Ehezufriedenheit, Ansehen, Monatskosten, Kinder aus Liebschaften).
Manuell ausführen auf der Ziel-DB (nach Backup):
psql "$DATABASE_URL" -f migrations/001_falukant_family_lovers.sql
002_falukant_family_rename_legacy_columns.sql
Nur nötig, wenn 001 bereits mit den alten Spaltennamen (consecutive_underpayment_months) eingespielt wurde.
Backend (YourPart3): Beim Anlegen einer lover-Beziehung relationship_state erzeugen; Ehezufriedenheit liegt auf relationship (married / engaged / wooing); Idempotenzfelder last_daily_processed_at / last_monthly_processed_at werden vom Daemon gesetzt.
Ohne passende Spalten (last_daily_processed_at) bleibt der Family-Worker inaktiv.
012_falukant_political_benefits_daemon.sql
Tabellen political_benefit_last_tick und optional political_appointment für den PoliticsWorker / Modul political_benefits.rs:
reputation_periodic: Ticks mit Persistenz (benötigt Backend-Seedsfalukant_predefine.political_office_benefitmit JSON-FelderntroderbenefitType,gain,intervalDays).free_lover_slots: Summecountim Liebschafts-Monatstick (Daemon), max. 5.- Ernennungen: Daemon setzt nur
pending→expired, wennexpires_atüberschritten (Anlage durch Backend-API).
Die Join-Spalte auf political_office_benefit heißt im Repo political_office_type_id — falls das Sequelize-Modell abweicht, SQL in src/worker/sql.rs anpassen.
013_falukant_political_daily_salary.sql
Spalte falukant_data.falukant_user.last_political_daily_salary_on (Datum): Idempotenz für political_benefits::run_daily_political_salary — einmal pro Tag Gutschrift; Beträge aus JSON-Feld daily_salary (tr/benefitType = daily_salary) oder gestufter Daemon-Fallback nach Amts-Rang.
014_falukant_certificate_productions_count_since.sql
Spalte falukant_data.falukant_user.certificate_productions_count_since: Zertifikats-Produktionszählung (Mindestwerte + Produktionspunkte) ab diesem Zeitpunkt; Daemon setzt bei Aufstieg/Bankrott/Erbfolge auf NOW(). NULL = bis zur ersten Änderung weiterhin alle passenden Log-Zeilen zählen.