-- iBoard 0.2.1: 外键 uuid 镜像列触发器 -- 由 0.2.1 验证库导出; 服务端写入时自动维护 projectUuid/columnUuid/parentUuid/taskUuid, -- 同步流据此把镜像列以 projectId/columnId/parentId/taskId 的别名下发给客户端。 CREATE OR REPLACE FUNCTION public.func_boardcolumn_uuid_map() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN SELECT "uuid" INTO NEW."projectUuid" FROM "Project" WHERE "id" = NEW."projectId"; IF NOT FOUND THEN RAISE EXCEPTION 'Project % 不存在', NEW."projectId"; END IF; RETURN NEW; END; $function$ ; CREATE OR REPLACE FUNCTION public.func_projectmember_uuid_map() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN SELECT "uuid" INTO NEW."projectUuid" FROM "Project" WHERE "id" = NEW."projectId"; IF NOT FOUND THEN RAISE EXCEPTION 'Project % 不存在', NEW."projectId"; END IF; RETURN NEW; END; $function$ ; CREATE OR REPLACE FUNCTION public.func_task_uuid_map() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN SELECT "uuid" INTO NEW."projectUuid" FROM "Project" WHERE "id" = NEW."projectId"; IF NOT FOUND THEN RAISE EXCEPTION 'Project % 不存在', NEW."projectId"; END IF; SELECT "uuid" INTO NEW."columnUuid" FROM "BoardColumn" WHERE "id" = NEW."columnId"; IF NOT FOUND THEN RAISE EXCEPTION 'BoardColumn % 不存在', NEW."columnId"; END IF; IF NEW."parentId" IS NULL THEN NEW."parentUuid" := NULL; ELSE SELECT "uuid" INTO NEW."parentUuid" FROM "Task" WHERE "id" = NEW."parentId"; IF NOT FOUND THEN RAISE EXCEPTION 'Task % 不存在', NEW."parentId"; END IF; END IF; RETURN NEW; END; $function$ ; CREATE OR REPLACE FUNCTION public.func_taskmember_uuid_map() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN SELECT "uuid" INTO NEW."taskUuid" FROM "Task" WHERE "id" = NEW."taskId"; IF NOT FOUND THEN RAISE EXCEPTION 'Task % 不存在', NEW."taskId"; END IF; RETURN NEW; END; $function$ ; CREATE OR REPLACE FUNCTION public.func_tasktag_uuid_map() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN SELECT "uuid" INTO NEW."taskUuid" FROM "Task" WHERE "id" = NEW."taskId"; IF NOT FOUND THEN RAISE EXCEPTION 'Task % 不存在', NEW."taskId"; END IF; RETURN NEW; END; $function$ ; CREATE TRIGGER trg_boardcolumn_uuid_map BEFORE INSERT OR UPDATE ON public."BoardColumn" FOR EACH ROW EXECUTE FUNCTION func_boardcolumn_uuid_map(); CREATE TRIGGER trg_projectmember_uuid_map BEFORE INSERT OR UPDATE ON public."ProjectMember" FOR EACH ROW EXECUTE FUNCTION func_projectmember_uuid_map(); CREATE TRIGGER trg_task_uuid_map BEFORE INSERT OR UPDATE ON public."Task" FOR EACH ROW EXECUTE FUNCTION func_task_uuid_map(); CREATE TRIGGER trg_taskmember_uuid_map BEFORE INSERT OR UPDATE ON public."TaskMember" FOR EACH ROW EXECUTE FUNCTION func_taskmember_uuid_map(); CREATE TRIGGER trg_tasktag_uuid_map BEFORE INSERT OR UPDATE ON public."TaskTag" FOR EACH ROW EXECUTE FUNCTION func_tasktag_uuid_map();