45 lines
1.4 KiB
PL/PgSQL
Executable File
45 lines
1.4 KiB
PL/PgSQL
Executable File
-- Type: DO
|
|
-- Name: received_emails
|
|
-- Description: Create a table for received emails
|
|
|
|
BEGIN;
|
|
|
|
CREATE TABLE omnivore.received_emails (
|
|
id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(),
|
|
user_id uuid NOT NULL REFERENCES omnivore.user ON DELETE CASCADE,
|
|
"from" text NOT NULL,
|
|
"to" text NOT NULL,
|
|
subject text NOT NULL DEFAULT '',
|
|
"text" text NOT NULL,
|
|
html text NOT NULL DEFAULT '',
|
|
"type" text NOT NULL,
|
|
created_at timestamptz NOT NULL DEFAULT current_timestamp,
|
|
updated_at timestamptz NOT NULL DEFAULT current_timestamp
|
|
);
|
|
|
|
CREATE TRIGGER received_emails_modtime BEFORE UPDATE ON omnivore.received_emails
|
|
FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON omnivore.received_emails TO omnivore_user;
|
|
|
|
-- Create a trigger to keep the most recent 20 emails for each user
|
|
CREATE OR REPLACE FUNCTION omnivore.delete_old_received_emails()
|
|
RETURNS trigger AS $$
|
|
BEGIN
|
|
DELETE FROM omnivore.received_emails
|
|
WHERE id NOT IN (
|
|
SELECT id FROM omnivore.received_emails
|
|
WHERE user_id = NEW.user_id
|
|
ORDER BY created_at DESC
|
|
LIMIT 20
|
|
);
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER delete_old_received_emails
|
|
AFTER INSERT ON omnivore.received_emails
|
|
FOR EACH ROW EXECUTE PROCEDURE omnivore.delete_old_received_emails();
|
|
|
|
COMMIT;
|