import { sequelize } from '../utils/sequelize.js'; export async function createTriggers() { const createTriggerFunction = ` CREATE OR REPLACE FUNCTION create_user_param_visibility_trigger() RETURNS TRIGGER AS $$ BEGIN -- Check if UserParamVisibility already exists for this UserParam IF NOT EXISTS ( SELECT 1 FROM community.user_param_visibility WHERE param_id = NEW.id ) THEN -- Insert the default visibility (Invisible) INSERT INTO community.user_param_visibility (param_id, visibility) VALUES (NEW.id, ( SELECT id FROM type.user_param_visibility WHERE description = 'Invisible' )); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; `; const createInsertTrigger = ` CREATE OR REPLACE TRIGGER trigger_create_user_param_visibility AFTER INSERT ON community.user_param FOR EACH ROW EXECUTE FUNCTION create_user_param_visibility_trigger(); `; const createUpdateTrigger = ` CREATE OR REPLACE TRIGGER trigger_update_user_param_visibility AFTER UPDATE ON community.user_param FOR EACH ROW EXECUTE FUNCTION create_user_param_visibility_trigger(); `; const createDiaryHistoryTriggerFunction = ` CREATE OR REPLACE FUNCTION insert_diary_history() RETURNS TRIGGER AS $$ BEGIN INSERT INTO community.diary_history (diaryId, userId, oldText, oldCreatedAt, oldUpdatedAt) VALUES (OLD.id, OLD.userId, OLD.text, OLD.createdAt, OLD.updatedAt); RETURN NEW; END; $$ LANGUAGE plpgsql; `; const createDiaryHistoryTrigger = ` CREATE OR REPLACE TRIGGER diary_update_trigger BEFORE UPDATE ON community.diary FOR EACH ROW EXECUTE FUNCTION insert_diary_history(); `; try { await sequelize.query(createTriggerFunction); await sequelize.query(createInsertTrigger); await sequelize.query(createUpdateTrigger); await sequelize.query(createDiaryHistoryTriggerFunction); await sequelize.query(createDiaryHistoryTrigger); console.log('Triggers created successfully'); } catch (error) { console.error('Error creating triggers:', error); } }