93 lines
3.6 KiB
PL/PgSQL
Executable File
93 lines
3.6 KiB
PL/PgSQL
Executable File
-- Type: DO
|
|
-- Name: public_item
|
|
-- Description: Create a table for public items
|
|
|
|
BEGIN;
|
|
|
|
CREATE TABLE omnivore.public_item_source (
|
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(),
|
|
name TEXT NOT NULL,
|
|
type TEXT NOT NULL, -- public feeds, newsletters, or user recommended
|
|
topics TEXT[],
|
|
icon TEXT,
|
|
url TEXT,
|
|
language_codes TEXT[],
|
|
approved BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TRIGGER update_public_item_source_modtime BEFORE UPDATE ON omnivore.public_item_source FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
|
GRANT SELECT ON omnivore.public_item_source TO omnivore_user;
|
|
|
|
|
|
CREATE TABLE omnivore.public_item (
|
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(),
|
|
source_id uuid NOT NULL REFERENCES omnivore.public_item_source(id) ON DELETE CASCADE,
|
|
site_icon TEXT,
|
|
type TEXT NOT NULL, -- public feeds, newsletters, or user recommended
|
|
title TEXT NOT NULL,
|
|
url TEXT NOT NULL,
|
|
topic TEXT,
|
|
approved BOOLEAN NOT NULL DEFAULT FALSE,
|
|
thumbnail TEXT,
|
|
preview_content TEXT,
|
|
language_code TEXT,
|
|
author TEXT,
|
|
dir TEXT,
|
|
published_at timestamptz,
|
|
word_count INT,
|
|
site_name TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TRIGGER update_public_item_modtime BEFORE UPDATE ON omnivore.public_item FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
|
GRANT SELECT ON omnivore.public_item TO omnivore_user;
|
|
|
|
|
|
CREATE TABLE omnivore.public_item_stats (
|
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(),
|
|
public_item_id uuid NOT NULL REFERENCES omnivore.public_item(id) ON DELETE CASCADE,
|
|
save_count INT NOT NULL DEFAULT 0,
|
|
like_count INT NOT NULL DEFAULT 0,
|
|
broadcast_count INT NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX public_item_stats_public_item_id_idx ON omnivore.public_item_stats(public_item_id);
|
|
CREATE TRIGGER update_public_item_stats_modtime BEFORE UPDATE ON omnivore.public_item_stats FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
|
GRANT SELECT ON omnivore.public_item_stats TO omnivore_user;
|
|
|
|
|
|
CREATE TABLE omnivore.public_item_interactions (
|
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(),
|
|
user_id uuid NOT NULL REFERENCES omnivore.user(id) ON DELETE CASCADE,
|
|
public_item_id uuid NOT NULL REFERENCES omnivore.public_item(id) ON DELETE CASCADE,
|
|
saved_at TIMESTAMPTZ,
|
|
liked_at TIMESTAMPTZ,
|
|
broadcasted_at TIMESTAMPTZ,
|
|
seen_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
digested_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX public_item_interaction_user_id_idx ON omnivore.public_item_interactions(user_id);
|
|
CREATE INDEX public_item_interaction_public_item_id_idx ON omnivore.public_item_interactions(public_item_id);
|
|
CREATE TRIGGER update_public_item_interactions_modtime BEFORE UPDATE ON omnivore.public_item_interactions FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
|
GRANT SELECT, INSERT, UPDATE ON omnivore.public_item_interactions TO omnivore_user;
|
|
|
|
CREATE EXTENSION IF NOT EXISTS LTREE;
|
|
|
|
ALTER TABLE omnivore.library_item
|
|
ADD COLUMN seen_at TIMESTAMPTZ,
|
|
ADD COLUMN digested_at TIMESTAMPTZ,
|
|
ADD COLUMN topic LTREE,
|
|
ADD COLUMN score FLOAT;
|
|
|
|
CREATE INDEX library_item_topic_idx ON omnivore.library_item USING GIST (topic);
|
|
|
|
COMMIT;
|