cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

28 lines
1.2 KiB
PL/PgSQL

ALTER TABLE "bots" ADD COLUMN "screenGeneration" INTEGER NOT NULL DEFAULT 0;
ALTER TABLE "computers" ADD COLUMN "screenGeneration" INTEGER NOT NULL DEFAULT 0;
-- Database fences cover lifecycle writes from the API, workers, and recovery paths.
-- A resumed provider may reuse its address and reference; old URLs must stay revoked.
CREATE FUNCTION revoke_computer_screens() RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
IF (NEW.state IS DISTINCT FROM OLD.state AND NOT (OLD.state = 'booting' AND NEW.state = 'running'))
OR NEW."providerRef" IS DISTINCT FROM OLD."providerRef" THEN
NEW."screenGeneration" := OLD."screenGeneration" + 1;
END IF;
RETURN NEW;
END;
$$;
CREATE TRIGGER revoke_computer_screens BEFORE UPDATE ON "computers"
FOR EACH ROW EXECUTE FUNCTION revoke_computer_screens();
CREATE FUNCTION revoke_bot_screens() RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
IF NEW."computerId" IS DISTINCT FROM OLD."computerId" OR NEW."archivedAt" IS DISTINCT FROM OLD."archivedAt" THEN
NEW."screenGeneration" := OLD."screenGeneration" + 1;
END IF;
RETURN NEW;
END;
$$;
CREATE TRIGGER revoke_bot_screens BEFORE UPDATE ON "bots"
FOR EACH ROW EXECUTE FUNCTION revoke_bot_screens();