Files
yourpart3/backend/migrations-active/20260812000000-repair-marriages-without-wedding.cjs
Torsten Schulz (local) 0505c5a2c5 Hochzeitsfehler behoben
2026-08-12 12:04:04 +02:00

69 lines
2.7 KiB
JavaScript

'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.
},
};