Add FalukantFamilyWorker and related SQL queries: Introduced the FalukantFamilyWorker to manage family-related logic, including marriage satisfaction and relationship states. Added new SQL queries for handling lover relationships and marriage updates, enhancing the overall functionality of family dynamics in the application.
This commit is contained in:
62
migrations/001_falukant_family_lovers.sql
Normal file
62
migrations/001_falukant_family_lovers.sql
Normal file
@@ -0,0 +1,62 @@
|
||||
-- Falukant: Liebhaber, Ehezufriedenheit, uneheliche Kinder (Handoff: externer Daemon)
|
||||
-- Siehe docs/FALUKANT_DAEMON_HANDOFF.md
|
||||
|
||||
ALTER TABLE falukant_data.character
|
||||
ADD COLUMN IF NOT EXISTS reputation numeric(6,2) NOT NULL DEFAULT 50.00;
|
||||
|
||||
ALTER TABLE falukant_data.relationship
|
||||
ADD COLUMN IF NOT EXISTS marriage_satisfaction smallint NOT NULL DEFAULT 55
|
||||
CHECK (marriage_satisfaction >= 0 AND marriage_satisfaction <= 100),
|
||||
ADD COLUMN IF NOT EXISTS marriage_drift_high smallint NOT NULL DEFAULT 0
|
||||
CHECK (marriage_drift_high >= 0 AND marriage_drift_high < 3),
|
||||
ADD COLUMN IF NOT EXISTS marriage_drift_low smallint NOT NULL DEFAULT 0
|
||||
CHECK (marriage_drift_low >= 0 AND marriage_drift_low < 5);
|
||||
|
||||
COMMENT ON COLUMN falukant_data.relationship.marriage_satisfaction IS
|
||||
'Ehezufriedenheit 0..100 (married / engaged / wooing); Schreiben durch Daemon';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS falukant_data.relationship_state (
|
||||
relationship_id integer PRIMARY KEY
|
||||
REFERENCES falukant_data.relationship (id) ON DELETE CASCADE,
|
||||
lover_role varchar(32) NOT NULL
|
||||
CHECK (lover_role IN ('secret_affair', 'lover', 'mistress_or_favorite')),
|
||||
affection smallint NOT NULL DEFAULT 50
|
||||
CHECK (affection >= 0 AND affection <= 100),
|
||||
visibility smallint NOT NULL DEFAULT 20
|
||||
CHECK (visibility >= 0 AND visibility <= 100),
|
||||
discretion smallint NOT NULL DEFAULT 50
|
||||
CHECK (discretion >= 0 AND discretion <= 100),
|
||||
maintenance_level smallint NOT NULL DEFAULT 50
|
||||
CHECK (maintenance_level >= 0 AND maintenance_level <= 100),
|
||||
status_fit smallint NOT NULL DEFAULT 0
|
||||
CHECK (status_fit >= -2 AND status_fit <= 2),
|
||||
monthly_base_cost integer NOT NULL DEFAULT 30,
|
||||
active boolean NOT NULL DEFAULT true,
|
||||
acknowledged boolean NOT NULL DEFAULT false,
|
||||
exclusive boolean,
|
||||
months_underfunded smallint NOT NULL DEFAULT 0
|
||||
CHECK (months_underfunded >= 0 AND months_underfunded < 100),
|
||||
scandal_extra_daily_pct smallint NOT NULL DEFAULT 0
|
||||
CHECK (scandal_extra_daily_pct >= 0 AND scandal_extra_daily_pct <= 100),
|
||||
last_daily_processed_at timestamptz,
|
||||
last_monthly_processed_at timestamptz
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_relationship_state_active
|
||||
ON falukant_data.relationship_state (active)
|
||||
WHERE active = true;
|
||||
|
||||
COMMENT ON COLUMN falukant_data.relationship_state.last_daily_processed_at IS
|
||||
'Idempotenz: kein zweiter Daily-Tick am selben Kalendertag (Serverzeit)';
|
||||
COMMENT ON COLUMN falukant_data.relationship_state.last_monthly_processed_at IS
|
||||
'Idempotenz: kein zweiter Monthly-Tick im selben Kalendermonat (Serverzeit)';
|
||||
|
||||
ALTER TABLE falukant_data.child_relation
|
||||
ADD COLUMN IF NOT EXISTS legitimacy varchar(32) NOT NULL DEFAULT 'legitimate'
|
||||
CHECK (legitimacy IN ('legitimate', 'acknowledged_bastard', 'hidden_bastard')),
|
||||
ADD COLUMN IF NOT EXISTS birth_context varchar(32) NOT NULL DEFAULT 'marriage'
|
||||
CHECK (birth_context IN ('marriage', 'lover')),
|
||||
ADD COLUMN IF NOT EXISTS public_known boolean NOT NULL DEFAULT true;
|
||||
|
||||
COMMENT ON COLUMN falukant_data.child_relation.legitimacy IS 'legitimate | acknowledged_bastard | hidden_bastard';
|
||||
COMMENT ON COLUMN falukant_data.child_relation.birth_context IS 'marriage | lover';
|
||||
18
migrations/002_falukant_family_rename_legacy_columns.sql
Normal file
18
migrations/002_falukant_family_rename_legacy_columns.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
-- Upgrade falls bereits 001 mit alten Spaltennamen eingespielt wurde.
|
||||
-- Neuinstallationen nutzen 001 direkt und brauchen 002 nicht.
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'falukant_data' AND table_name = 'relationship_state'
|
||||
AND column_name = 'consecutive_underpayment_months'
|
||||
) THEN
|
||||
ALTER TABLE falukant_data.relationship_state
|
||||
RENAME COLUMN consecutive_underpayment_months TO months_underfunded;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
ALTER TABLE falukant_data.relationship_state
|
||||
ADD COLUMN IF NOT EXISTS last_daily_processed_at timestamptz,
|
||||
ADD COLUMN IF NOT EXISTS last_monthly_processed_at timestamptz;
|
||||
21
migrations/README.md
Normal file
21
migrations/README.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# 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):
|
||||
|
||||
```bash
|
||||
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.
|
||||
Reference in New Issue
Block a user