pediatric-ai-scribe-v3/migrations/1777900000000_image-context.js

20 lines
1.1 KiB
JavaScript

// Existing immutable snapshots retain unknown context metadata; never fabricate old counts.
exports.up = pgm => pgm.sql(`
ALTER TABLE generated_image_jobs ADD context_included INTEGER, ADD context_total INTEGER,
ADD CONSTRAINT generated_image_context_counts CHECK (
(context_included IS NULL AND context_total IS NULL) OR
(context_included IS NOT NULL AND context_total IS NOT NULL AND context_included >= 0 AND context_total >= context_included));
CREATE FUNCTION guard_generated_image_context() RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
IF (NEW.context_included, NEW.context_total) IS DISTINCT FROM (OLD.context_included, OLD.context_total) THEN
RAISE EXCEPTION 'Image context metadata is immutable';
END IF;
RETURN NEW;
END; $$;
CREATE TRIGGER generated_image_context_immutable BEFORE UPDATE ON generated_image_jobs FOR EACH ROW EXECUTE FUNCTION guard_generated_image_context();
`);
exports.down = pgm => pgm.sql(`
DROP TRIGGER generated_image_context_immutable ON generated_image_jobs;
DROP FUNCTION guard_generated_image_context();
ALTER TABLE generated_image_jobs DROP context_included, DROP context_total;
`);