Integrate death log functionality into character and event processing: Added death context handling in CharacterCreationWorker and EventsWorker to enhance user notifications related to character deaths. Updated SQL queries for retrieving deceased context and modified notification logic to support detailed death notifications. Enhanced user notification methods to accommodate both short event names and JSON payloads for improved clarity in messaging.
This commit is contained in:
@@ -641,6 +641,67 @@ pub const QUERY_GET_REGION_CHARACTERS: &str = r#"
|
||||
SELECT id, health, user_id FROM falukant_data."character" WHERE region_id = $1 AND health > 0;
|
||||
"#;
|
||||
|
||||
/// Anzeige für Todes-Logs (`falukant_log.notification.tr` als JSON): Name, Wohnort, Alter, Verknüpfungen.
|
||||
/// `region_id` = Ansässigkeit; `region_label` aus `falukant_data.region.name`, falls vorhanden, sonst `region_id` als Text.
|
||||
pub const QUERY_DEATH_LOG_CHARACTER_BASE: &str = r#"
|
||||
SELECT
|
||||
c.id AS character_id,
|
||||
COALESCE(TRIM(BOTH FROM COALESCE(fn.label::text, '') || ' ' || COALESCE(ln.label::text, '')), c.id::text) AS display_name,
|
||||
c.region_id,
|
||||
COALESCE(NULLIF(TRIM(dr.name::text), ''), c.region_id::text) AS region_label,
|
||||
GREATEST(0, FLOOR((CURRENT_DATE - c.birthdate::date) / 365.25))::int AS age_years
|
||||
FROM falukant_data.character c
|
||||
LEFT JOIN falukant_predefine.firstname fn ON fn.id = c.first_name
|
||||
LEFT JOIN falukant_predefine.lastname ln ON ln.id = c.last_name
|
||||
LEFT JOIN falukant_data.region dr ON dr.id = c.region_id
|
||||
WHERE c.id = $1::int;
|
||||
"#;
|
||||
|
||||
pub const QUERY_DEATH_LOG_SPOUSE_DISPLAY_NAMES: &str = r#"
|
||||
SELECT COALESCE(TRIM(BOTH FROM COALESCE(fn.label::text, '') || ' ' || COALESCE(ln.label::text, '')), o.id::text) AS display_name
|
||||
FROM falukant_data.relationship r
|
||||
JOIN falukant_type.relationship rt ON rt.id = r.relationship_type_id
|
||||
AND rt.tr IN ('married', 'engaged', 'wooing')
|
||||
JOIN falukant_data.character o ON o.id = CASE WHEN r.character1_id = $1::int THEN r.character2_id ELSE r.character1_id END
|
||||
LEFT JOIN falukant_predefine.firstname fn ON fn.id = o.first_name
|
||||
LEFT JOIN falukant_predefine.lastname ln ON ln.id = o.last_name
|
||||
WHERE r.character1_id = $1::int OR r.character2_id = $1::int;
|
||||
"#;
|
||||
|
||||
pub const QUERY_DEATH_LOG_CHILD_DISPLAY_NAMES: &str = r#"
|
||||
SELECT COALESCE(TRIM(BOTH FROM COALESCE(fn.label::text, '') || ' ' || COALESCE(ln.label::text, '')), ch.id::text) AS display_name
|
||||
FROM falukant_data.child_relation cr
|
||||
JOIN falukant_data.character ch ON ch.id = cr.child_character_id
|
||||
LEFT JOIN falukant_predefine.firstname fn ON fn.id = ch.first_name
|
||||
LEFT JOIN falukant_predefine.lastname ln ON ln.id = ch.last_name
|
||||
WHERE cr.father_character_id = $1::int OR cr.mother_character_id = $1::int;
|
||||
"#;
|
||||
|
||||
/// Kinder mit `birth_context = 'lover'` (unehelich / aus Liebschaft); Teilmenge von `QUERY_DEATH_LOG_CHILD_DISPLAY_NAMES`.
|
||||
pub const QUERY_DEATH_LOG_CHILD_LOVER_BIRTH_DISPLAY_NAMES: &str = r#"
|
||||
SELECT COALESCE(TRIM(BOTH FROM COALESCE(fn.label::text, '') || ' ' || COALESCE(ln.label::text, '')), ch.id::text) AS display_name
|
||||
FROM falukant_data.child_relation cr
|
||||
JOIN falukant_data.character ch ON ch.id = cr.child_character_id
|
||||
LEFT JOIN falukant_predefine.firstname fn ON fn.id = ch.first_name
|
||||
LEFT JOIN falukant_predefine.lastname ln ON ln.id = ch.last_name
|
||||
WHERE (cr.father_character_id = $1::int OR cr.mother_character_id = $1::int)
|
||||
AND cr.birth_context = 'lover';
|
||||
"#;
|
||||
|
||||
/// Geliebte: Zeilen in `falukant_data.relationship`, Typ über `falukant_type.relationship` mit `tr = 'lover'`
|
||||
/// (kein Filter auf `relationship_state.lover_role` — `secret_affair` / `lover` / `mistress_or_favorite` sind nur Ausprägungen).
|
||||
/// „Aktiv“ wie Backend (`falukantService`): `relationship_state.active` darf nicht `false` sein (`IS NOT FALSE`).
|
||||
pub const QUERY_DEATH_LOG_LOVER_DISPLAY_NAMES: &str = r#"
|
||||
SELECT COALESCE(TRIM(BOTH FROM COALESCE(fn.label::text, '') || ' ' || COALESCE(ln.label::text, '')), o.id::text) AS display_name
|
||||
FROM falukant_data.relationship r
|
||||
JOIN falukant_type.relationship rt ON rt.id = r.relationship_type_id AND rt.tr = 'lover'
|
||||
JOIN falukant_data.relationship_state rs ON rs.relationship_id = r.id AND (rs.active IS NOT FALSE)
|
||||
JOIN falukant_data.character o ON o.id = CASE WHEN r.character1_id = $1::int THEN r.character2_id ELSE r.character1_id END
|
||||
LEFT JOIN falukant_predefine.firstname fn ON fn.id = o.first_name
|
||||
LEFT JOIN falukant_predefine.lastname ln ON ln.id = o.last_name
|
||||
WHERE r.character1_id = $1::int OR r.character2_id = $1::int;
|
||||
"#;
|
||||
|
||||
pub const QUERY_DELETE_DIRECTOR: &str = r#"
|
||||
DELETE FROM falukant_data.director WHERE director_character_id = $1 RETURNING employer_user_id;
|
||||
"#;
|
||||
|
||||
Reference in New Issue
Block a user