66 lines
1.9 KiB
PL/PgSQL
Executable File
66 lines
1.9 KiB
PL/PgSQL
Executable File
-- Type: DO
|
|
-- Name: update_highlight
|
|
-- Description: Add fields to highlight table
|
|
|
|
BEGIN;
|
|
|
|
-- delete existing highlights
|
|
DELETE FROM omnivore.highlight;
|
|
|
|
CREATE TYPE highlight_type AS ENUM (
|
|
'HIGHLIGHT',
|
|
'REDACTION',
|
|
'NOTE'
|
|
);
|
|
|
|
ALTER TABLE omnivore.highlight
|
|
ADD COLUMN library_item_id uuid NOT NULL REFERENCES omnivore.library_item ON DELETE CASCADE,
|
|
ADD COLUMN highlight_position_percent real NOT NULL DEFAULT 0,
|
|
ADD COLUMN highlight_position_anchor_index integer NOT NULL DEFAULT 0,
|
|
ADD COLUMN highlight_type highlight_type NOT NULL DEFAULT 'HIGHLIGHT',
|
|
ADD COLUMN color text,
|
|
ADD COLUMN html text,
|
|
ALTER COLUMN quote DROP NOT NULL,
|
|
ALTER COLUMN patch DROP NOT NULL,
|
|
DROP COLUMN deleted,
|
|
DROP COLUMN article_id,
|
|
DROP COLUMN elastic_page_id;
|
|
|
|
CREATE POLICY delete_highlight on omnivore.highlight
|
|
FOR DELETE TO omnivore_user
|
|
USING (user_id = omnivore.get_current_user_id());
|
|
|
|
GRANT DELETE ON omnivore.highlight TO omnivore_user;
|
|
|
|
CREATE OR REPLACE FUNCTION update_library_item_highlight_annotations()
|
|
RETURNS TRIGGER AS $$
|
|
DECLARE
|
|
current_library_item_id uuid;
|
|
BEGIN
|
|
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
|
|
current_library_item_id = NEW.library_item_id;
|
|
ELSE
|
|
current_library_item_id = OLD.library_item_id;
|
|
END IF;
|
|
|
|
WITH highlight_agg AS (
|
|
SELECT array_agg(coalesce(annotation, '')) AS annotation_agg
|
|
FROM omnivore.highlight
|
|
WHERE library_item_id = current_library_item_id
|
|
)
|
|
UPDATE omnivore.library_item li
|
|
SET highlight_annotations = coalesce(h.annotation_agg, array[]::text[])
|
|
FROM highlight_agg h
|
|
WHERE li.id = current_library_item_id;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER library_item_highlight_annotations_update
|
|
AFTER INSERT OR UPDATE OR DELETE ON omnivore.highlight
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_library_item_highlight_annotations();
|
|
|
|
COMMIT;
|