Füge Altersprüfungen für Ehen und Schwangerschaften hinzu
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 6m13s
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 6m13s
This commit is contained in:
@@ -1607,7 +1607,14 @@ pub const QUERY_SET_MARRIAGES_BY_PARTY: &str = r#"
|
|||||||
JOIN falukant_type.relationship AS rt2
|
JOIN falukant_type.relationship AS rt2
|
||||||
ON rt2.id = rel2.relationship_type_id
|
ON rt2.id = rel2.relationship_type_id
|
||||||
AND rt2.tr = 'engaged'
|
AND rt2.tr = 'engaged'
|
||||||
|
JOIN falukant_data.character AS partner
|
||||||
|
ON partner.id = CASE
|
||||||
|
WHEN rel2.character1_id = c.id THEN rel2.character2_id
|
||||||
|
ELSE rel2.character1_id
|
||||||
|
END
|
||||||
WHERE p.created_at <= NOW() - INTERVAL '1 day'
|
WHERE p.created_at <= NOW() - INTERVAL '1 day'
|
||||||
|
AND c.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||||
|
AND partner.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||||
)
|
)
|
||||||
RETURNING character1_id, character2_id
|
RETURNING character1_id, character2_id
|
||||||
)
|
)
|
||||||
@@ -1946,4 +1953,3 @@ pub const QUERY_CHECK_EXISTING_CHURCH_OFFICE: &str = r#"
|
|||||||
WHERE co.character_id = $1
|
WHERE co.character_id = $1
|
||||||
) AS has_office;
|
) AS has_office;
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
|
|||||||
@@ -2133,6 +2133,10 @@ pub const QUERY_GET_MARRIAGE_BIRTH_DELIVERIES: &str = r#"
|
|||||||
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
||||||
WHERE r.marriage_pregnancy_due_at IS NOT NULL
|
WHERE r.marriage_pregnancy_due_at IS NOT NULL
|
||||||
AND r.marriage_pregnancy_due_at <= NOW()
|
AND r.marriage_pregnancy_due_at <= NOW()
|
||||||
|
-- Eine fällige automatische Ehe-Geburt bleibt vorgemerkt, bis beide
|
||||||
|
-- Eltern mindestens 16 Spieljahre (Kalendertage) alt sind.
|
||||||
|
AND c1.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
AND c2.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
AND ((c1.gender = 'male' AND c2.gender = 'female')
|
AND ((c1.gender = 'male' AND c2.gender = 'female')
|
||||||
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
||||||
AND c_female.pregnancy_due_at IS NULL
|
AND c_female.pregnancy_due_at IS NULL
|
||||||
@@ -2182,6 +2186,8 @@ pub const QUERY_TRY_MARRIAGE_CONCEPTION_UPDATE: &str = r#"
|
|||||||
LEFT JOIN falukant_data.falukant_user fu1 ON fu1.id = c1.user_id
|
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
|
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
||||||
WHERE r.marriage_pregnancy_due_at IS NULL
|
WHERE r.marriage_pregnancy_due_at IS NULL
|
||||||
|
AND c1.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
AND c2.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
AND ((c1.gender = 'male' AND c2.gender = 'female')
|
AND ((c1.gender = 'male' AND c2.gender = 'female')
|
||||||
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
||||||
AND c_female.pregnancy_due_at IS NULL
|
AND c_female.pregnancy_due_at IS NULL
|
||||||
@@ -2246,6 +2252,8 @@ pub const QUERY_GET_LEGACY_MARRIAGE_INSTANT_PREGNANCY_CANDIDATES: &str = r#"
|
|||||||
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
||||||
WHERE ((c1.gender = 'male' AND c2.gender = 'female')
|
WHERE ((c1.gender = 'male' AND c2.gender = 'female')
|
||||||
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
||||||
|
AND c1.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
AND c2.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
AND c_female.pregnancy_due_at IS NULL
|
AND c_female.pregnancy_due_at IS NULL
|
||||||
AND NOT EXISTS (
|
AND NOT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
@@ -2323,6 +2331,10 @@ pub const QUERY_GET_PLANNED_CHARACTER_BIRTH_DELIVERIES: &str = r#"
|
|||||||
AND c_m.pregnancy_due_at <= NOW()
|
AND c_m.pregnancy_due_at <= NOW()
|
||||||
AND c_m.pregnancy_father_character_id IS NOT NULL
|
AND c_m.pregnancy_father_character_id IS NOT NULL
|
||||||
AND c_m.pregnancy_father_character_id <> c_m.id
|
AND c_m.pregnancy_father_character_id <> c_m.id
|
||||||
|
-- Geplante Schwangerschaften werden nicht verworfen, sondern erst
|
||||||
|
-- nach Erreichen des gemeinsamen Mindestalters ausgeliefert.
|
||||||
|
AND c_m.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
AND c_f.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
AND c_m.health > 0
|
AND c_m.health > 0
|
||||||
AND NOT EXISTS (
|
AND NOT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
@@ -2824,7 +2836,14 @@ pub const QUERY_SET_MARRIAGES_BY_PARTY: &str = r#"
|
|||||||
JOIN falukant_type.relationship AS rt2
|
JOIN falukant_type.relationship AS rt2
|
||||||
ON rt2.id = rel2.relationship_type_id
|
ON rt2.id = rel2.relationship_type_id
|
||||||
AND rt2.tr = 'engaged'
|
AND rt2.tr = 'engaged'
|
||||||
|
JOIN falukant_data.character AS partner
|
||||||
|
ON partner.id = CASE
|
||||||
|
WHEN rel2.character1_id = c.id THEN rel2.character2_id
|
||||||
|
ELSE rel2.character1_id
|
||||||
|
END
|
||||||
WHERE p.created_at <= NOW() - INTERVAL '1 day'
|
WHERE p.created_at <= NOW() - INTERVAL '1 day'
|
||||||
|
AND c.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||||
|
AND partner.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||||
)
|
)
|
||||||
RETURNING character1_id, character2_id
|
RETURNING character1_id, character2_id
|
||||||
)
|
)
|
||||||
@@ -3816,6 +3835,8 @@ pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
|||||||
-- `last_monthly_processed_at` wird im Familien-Tageslauf mitgeführt (1 Spieljahr = 1 Kalendertag).
|
-- `last_monthly_processed_at` wird im Familien-Tageslauf mitgeführt (1 Spieljahr = 1 Kalendertag).
|
||||||
AND rs.last_monthly_processed_at IS NOT NULL
|
AND rs.last_monthly_processed_at IS NOT NULL
|
||||||
AND rs.last_monthly_processed_at >= NOW() - INTERVAL '50 days'
|
AND rs.last_monthly_processed_at >= NOW() - INTERVAL '50 days'
|
||||||
|
AND c1.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
AND c2.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
AND c_female.pregnancy_due_at IS NULL
|
AND c_female.pregnancy_due_at IS NULL
|
||||||
AND NOT EXISTS (
|
AND NOT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
@@ -3859,6 +3880,13 @@ pub const QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER: &str = r#"
|
|||||||
WHERE c_m.id = $1::int
|
WHERE c_m.id = $1::int
|
||||||
AND c_m.health > 0
|
AND c_m.health > 0
|
||||||
AND c_m.pregnancy_due_at IS NULL
|
AND c_m.pregnancy_due_at IS NULL
|
||||||
|
AND c_m.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
AND EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM falukant_data.character c_f
|
||||||
|
WHERE c_f.id = $2::int
|
||||||
|
AND c_f.birthdate <= CURRENT_DATE - INTERVAL '16 days'
|
||||||
|
)
|
||||||
AND NOT EXISTS (
|
AND NOT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM falukant_data.relationship rm
|
FROM falukant_data.relationship rm
|
||||||
@@ -4031,3 +4059,33 @@ pub const QUERY_GET_FALUKANT_USER_CERT_AND_EVENT: &str = r#"
|
|||||||
FROM falukant_data.falukant_user
|
FROM falukant_data.falukant_user
|
||||||
WHERE id = $1::int;
|
WHERE id = $1::int;
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
const AGE_14_GUARD: &str = "birthdate <= CURRENT_DATE - INTERVAL '14 days'";
|
||||||
|
const AGE_16_GUARD: &str = "birthdate <= CURRENT_DATE - INTERVAL '16 days'";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn weddings_require_both_fiances_to_be_fourteen() {
|
||||||
|
assert_eq!(QUERY_SET_MARRIAGES_BY_PARTY.matches(AGE_14_GUARD).count(), 2);
|
||||||
|
assert!(QUERY_SET_MARRIAGES_BY_PARTY.contains("p.created_at <= NOW() - INTERVAL '1 day'"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn automatic_pregnancy_and_birth_paths_require_both_parents_to_be_sixteen() {
|
||||||
|
for query in [
|
||||||
|
QUERY_GET_MARRIAGE_BIRTH_DELIVERIES,
|
||||||
|
QUERY_TRY_MARRIAGE_CONCEPTION_UPDATE,
|
||||||
|
QUERY_GET_LEGACY_MARRIAGE_INSTANT_PREGNANCY_CANDIDATES,
|
||||||
|
QUERY_GET_PLANNED_CHARACTER_BIRTH_DELIVERIES,
|
||||||
|
QUERY_GET_LOVER_PREGNANCY_CANDIDATES,
|
||||||
|
] {
|
||||||
|
assert_eq!(query.matches(AGE_16_GUARD).count(), 2, "{query}");
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER.contains(AGE_16_GUARD));
|
||||||
|
assert!(QUERY_GET_PLANNED_CHARACTER_BIRTH_DELIVERIES.contains("pregnancy_due_at <= NOW()"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user