Hochzeitsfehler behoben
This commit is contained in:
@@ -0,0 +1,68 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A relationship may only become married after a wedding party. Older data
|
||||||
|
* contains a few relationships that skipped that transition; besides showing
|
||||||
|
* the wrong status this also prevents ordering the required wedding party.
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
async up(queryInterface) {
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
WITH invalid_marriages AS (
|
||||||
|
SELECT r.id, r.character1_id, r.character2_id
|
||||||
|
FROM falukant_data.relationship r
|
||||||
|
INNER JOIN falukant_type.relationship relationship_type
|
||||||
|
ON relationship_type.id = r.relationship_type_id
|
||||||
|
AND relationship_type.tr = 'married'
|
||||||
|
WHERE NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM falukant_data.party p
|
||||||
|
INNER JOIN falukant_type.party party_type
|
||||||
|
ON party_type.id = p.party_type_id
|
||||||
|
AND party_type.for_marriage = TRUE
|
||||||
|
INNER JOIN falukant_data."character" party_host
|
||||||
|
ON party_host.user_id = p.falukant_user_id
|
||||||
|
WHERE party_host.id IN (r.character1_id, r.character2_id)
|
||||||
|
AND p.created_at >= r.created_at
|
||||||
|
)
|
||||||
|
),
|
||||||
|
reset_relationships AS (
|
||||||
|
UPDATE falukant_data.relationship r
|
||||||
|
SET relationship_type_id = (
|
||||||
|
SELECT id FROM falukant_type.relationship WHERE tr = 'engaged'
|
||||||
|
)
|
||||||
|
FROM invalid_marriages invalid_marriage
|
||||||
|
WHERE r.id = invalid_marriage.id
|
||||||
|
RETURNING r.id
|
||||||
|
),
|
||||||
|
reset_honeymoon_flags AS (
|
||||||
|
UPDATE falukant_data.relationship_state relationship_state
|
||||||
|
SET flags_json = COALESCE(relationship_state.flags_json, '{}'::jsonb)
|
||||||
|
- 'honeymoonPregnancyScheduled'
|
||||||
|
FROM invalid_marriages invalid_marriage
|
||||||
|
WHERE relationship_state.relationship_id = invalid_marriage.id
|
||||||
|
RETURNING invalid_marriage.character1_id, invalid_marriage.character2_id
|
||||||
|
)
|
||||||
|
UPDATE falukant_data."character" mother
|
||||||
|
SET pregnancy_due_at = NULL,
|
||||||
|
pregnancy_father_character_id = NULL
|
||||||
|
FROM reset_honeymoon_flags invalid_marriage
|
||||||
|
INNER JOIN falukant_data."character" character1
|
||||||
|
ON character1.id = invalid_marriage.character1_id
|
||||||
|
INNER JOIN falukant_data."character" character2
|
||||||
|
ON character2.id = invalid_marriage.character2_id
|
||||||
|
WHERE mother.id = CASE
|
||||||
|
WHEN LOWER(character1.gender) IN ('female', 'f') THEN character1.id
|
||||||
|
WHEN LOWER(character2.gender) IN ('female', 'f') THEN character2.id
|
||||||
|
END
|
||||||
|
AND mother.pregnancy_father_character_id = CASE
|
||||||
|
WHEN LOWER(character1.gender) IN ('female', 'f') THEN character2.id
|
||||||
|
WHEN LOWER(character2.gender) IN ('female', 'f') THEN character1.id
|
||||||
|
END;
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
|
||||||
|
async down() {
|
||||||
|
// The original state cannot be reconstructed safely without inventing a wedding.
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -5646,6 +5646,11 @@ class FalukantService extends BaseService {
|
|||||||
const partner = partnerId
|
const partner = partnerId
|
||||||
? await FalukantCharacter.findByPk(partnerId, { attributes: ['birthdate'] })
|
? await FalukantCharacter.findByPk(partnerId, { attributes: ['birthdate'] })
|
||||||
: null;
|
: null;
|
||||||
|
if (!engagement) {
|
||||||
|
const error = new Error('Für eine Hochzeitsfeier musst du mit deinem Partner verlobt sein');
|
||||||
|
error.status = 422;
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
if (!partner || calcAge(partner.birthdate) < FAMILY_AGE.MIN_MARRIAGE) {
|
if (!partner || calcAge(partner.birthdate) < FAMILY_AGE.MIN_MARRIAGE) {
|
||||||
const error = new Error('Beide Verlobten müssen mindestens 14 Spieljahre alt sein');
|
const error = new Error('Beide Verlobten müssen mindestens 14 Spieljahre alt sein');
|
||||||
error.status = 422;
|
error.status = 422;
|
||||||
|
|||||||
@@ -118,6 +118,8 @@ private:
|
|||||||
ON rt2.id = rel2.relationship_type_id
|
ON rt2.id = rel2.relationship_type_id
|
||||||
AND rt2.tr = 'engaged'
|
AND rt2.tr = 'engaged'
|
||||||
WHERE p.created_at <= NOW() - INTERVAL '1 day'
|
WHERE p.created_at <= NOW() - INTERVAL '1 day'
|
||||||
|
-- Die Feier muss für diese bereits bestehende Verlobung bestellt worden sein.
|
||||||
|
AND p.created_at >= rel2.created_at
|
||||||
-- Ein realer Tag entspricht einem Spieljahr: Hochzeit ab 14.
|
-- Ein realer Tag entspricht einem Spieljahr: Hochzeit ab 14.
|
||||||
AND c.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
AND c.birthdate <= CURRENT_DATE - INTERVAL '14 days'
|
||||||
AND (
|
AND (
|
||||||
|
|||||||
Reference in New Issue
Block a user