Files
yourpart3/backend/migrations-active/20261104000001-add-character-appearance.cjs
Torsten Schulz (local) bc7a0cb67a
All checks were successful
Deploy to production / deploy (push) Successful in 2m24s
Speichere individuelle Haar- und Augenfarben je Charakter
2026-11-04 16:54:33 +01:00

76 lines
2.8 KiB
JavaScript

'use strict';
module.exports = {
async up(queryInterface) {
await queryInterface.sequelize.transaction(async (transaction) => {
await queryInterface.sequelize.query(`
ALTER TABLE falukant_data.character
ADD COLUMN IF NOT EXISTS hair_color VARCHAR(7),
ADD COLUMN IF NOT EXISTS eye_color VARCHAR(7);
CREATE OR REPLACE FUNCTION falukant_data.initialize_character_appearance()
RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
IF TG_OP = 'UPDATE' THEN
NEW.hair_color := COALESCE(NEW.hair_color, OLD.hair_color);
NEW.eye_color := COALESCE(NEW.eye_color, OLD.eye_color);
END IF;
IF NEW.hair_color IS NULL THEN
NEW.hair_color := (ARRAY[
'#211b18', '#493024', '#69432d', '#95603c', '#c69c60', '#d8bf83', '#a34826'
])[1 + floor(random() * 7)::int];
END IF;
IF NEW.eye_color IS NULL THEN
NEW.eye_color := (ARRAY[
'#493026', '#795532', '#8b7544', '#56704c', '#497c9c', '#75858b'
])[1 + floor(random() * 6)::int];
END IF;
RETURN NEW;
END;
$$;
DROP TRIGGER IF EXISTS initialize_character_appearance ON falukant_data.character;
CREATE TRIGGER initialize_character_appearance
BEFORE INSERT OR UPDATE ON falukant_data.character
FOR EACH ROW EXECUTE FUNCTION falukant_data.initialize_character_appearance();
UPDATE falukant_data.character SET hair_color = hair_color
WHERE hair_color IS NULL OR eye_color IS NULL;
ALTER TABLE falukant_data.character
ALTER COLUMN hair_color SET NOT NULL,
ALTER COLUMN eye_color SET NOT NULL;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conrelid = 'falukant_data.character'::regclass
AND conname = 'character_appearance_colors_valid'
) THEN
ALTER TABLE falukant_data.character
ADD CONSTRAINT character_appearance_colors_valid CHECK (
hair_color ~ '^#[0-9a-fA-F]{6}$'
AND eye_color ~ '^#[0-9a-fA-F]{6}$'
);
END IF;
END;
$$;
`, { transaction });
});
},
async down(queryInterface) {
await queryInterface.sequelize.transaction(async (transaction) => {
await queryInterface.sequelize.query(`
DROP TRIGGER IF EXISTS initialize_character_appearance ON falukant_data.character;
DROP FUNCTION IF EXISTS falukant_data.initialize_character_appearance();
ALTER TABLE falukant_data.character
DROP CONSTRAINT IF EXISTS character_appearance_colors_valid,
DROP COLUMN IF EXISTS hair_color,
DROP COLUMN IF EXISTS eye_color;
`, { transaction });
});
},
};