Speichere individuelle Haar- und Augenfarben je Charakter
All checks were successful
Deploy to production / deploy (push) Successful in 2m24s
All checks were successful
Deploy to production / deploy (push) Successful in 2m24s
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
'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 });
|
||||
});
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user