Implement lover installment logic in FalukantFamilyWorker: Added support for processing lover maintenance payments every 2 hours, including new SQL queries for installment tracking and updates to relationship states. Enhanced WebSocket events to notify UI of installment changes, improving family dynamics and financial interactions.
This commit is contained in:
@@ -2395,6 +2395,66 @@ pub const QUERY_MARK_LOVER_MONTHLY_DONE: &str = r#"
|
||||
WHERE relationship_id = $1::int;
|
||||
"#;
|
||||
|
||||
/// Liebschaft: fällige Teilzahlung (alle 2 h), Migration `006_falukant_lover_installments.sql`.
|
||||
pub const QUERY_GET_ACTIVE_LOVER_ROWS_FOR_INSTALLMENT: &str = r#"
|
||||
SELECT
|
||||
r.id AS rel_id,
|
||||
r.character1_id AS c1,
|
||||
r.character2_id AS c2,
|
||||
rs.lover_role,
|
||||
rs.affection,
|
||||
rs.visibility,
|
||||
rs.discretion,
|
||||
rs.maintenance_level,
|
||||
rs.status_fit,
|
||||
rs.monthly_base_cost,
|
||||
rs.scandal_extra_daily_pct,
|
||||
rs.months_underfunded,
|
||||
c1.gender AS g1,
|
||||
c2.gender AS g2,
|
||||
COALESCE(t1.tr, '') AS title1_tr,
|
||||
COALESCE(t2.tr, '') AS title2_tr,
|
||||
COALESCE(c1.reputation, 50)::float8 AS rep1,
|
||||
COALESCE(c2.reputation, 50)::float8 AS rep2,
|
||||
fu1.id AS user1_id,
|
||||
fu2.id AS user2_id,
|
||||
LEAST(
|
||||
((CURRENT_DATE - c1.birthdate::date) / 365),
|
||||
((CURRENT_DATE - c2.birthdate::date) / 365)
|
||||
)::int AS min_age_years
|
||||
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
|
||||
JOIN falukant_data.character c1 ON c1.id = r.character1_id
|
||||
JOIN falukant_data.character c2 ON c2.id = r.character2_id
|
||||
LEFT JOIN falukant_type.title t1 ON t1.id = c1.title_of_nobility
|
||||
LEFT JOIN falukant_type.title t2 ON t2.id = c2.title_of_nobility
|
||||
LEFT JOIN falukant_data.falukant_user fu1 ON fu1.id = c1.user_id
|
||||
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
||||
WHERE rs.active = true
|
||||
AND (
|
||||
rs.lover_last_installment_at IS NULL
|
||||
OR rs.lover_last_installment_at < NOW() - INTERVAL '2 hours'
|
||||
);
|
||||
"#;
|
||||
|
||||
pub const QUERY_MARK_LOVER_INSTALLMENT_AT: &str = r#"
|
||||
UPDATE falukant_data.relationship_state
|
||||
SET lover_last_installment_at = NOW()
|
||||
WHERE relationship_id = $1::int;
|
||||
"#;
|
||||
|
||||
pub const QUERY_LOVER_INSTALLMENT_SCHEMA_READY: &str = r#"
|
||||
SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'falukant_data'
|
||||
AND table_name = 'relationship_state'
|
||||
AND column_name = 'lover_last_installment_at'
|
||||
) AS ready;
|
||||
"#;
|
||||
|
||||
pub const QUERY_UPDATE_CHARACTER_REPUTATION: &str = r#"
|
||||
UPDATE falukant_data.character
|
||||
SET reputation = $1::numeric,
|
||||
|
||||
Reference in New Issue
Block a user