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:
@@ -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
|
||||
WHERE r.marriage_pregnancy_due_at IS NOT NULL
|
||||
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')
|
||||
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
||||
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 fu2 ON fu2.id = c2.user_id
|
||||
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')
|
||||
OR (c1.gender = 'female' AND c2.gender = 'male'))
|
||||
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
|
||||
WHERE ((c1.gender = 'male' AND c2.gender = 'female')
|
||||
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 NOT EXISTS (
|
||||
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_father_character_id IS NOT NULL
|
||||
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 NOT EXISTS (
|
||||
SELECT 1
|
||||
@@ -2824,7 +2836,14 @@ pub const QUERY_SET_MARRIAGES_BY_PARTY: &str = r#"
|
||||
JOIN falukant_type.relationship AS rt2
|
||||
ON rt2.id = rel2.relationship_type_id
|
||||
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'
|
||||
AND c.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||
AND partner.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||
)
|
||||
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).
|
||||
AND rs.last_monthly_processed_at IS NOT NULL
|
||||
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 NOT EXISTS (
|
||||
SELECT 1
|
||||
@@ -3859,6 +3880,13 @@ pub const QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER: &str = r#"
|
||||
WHERE c_m.id = $1::int
|
||||
AND c_m.health > 0
|
||||
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 (
|
||||
SELECT 1
|
||||
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
|
||||
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