78 lines
No EOL
3 KiB
PL/PgSQL
78 lines
No EOL
3 KiB
PL/PgSQL
CREATE TABLE IF NOT EXISTS public_collection_tokens
|
|
(
|
|
id bigint primary key generated always as identity,
|
|
collection_id BIGINT NOT NULL,
|
|
access_token TEXT NOT NULL,
|
|
is_disabled bool not null DEFAULT FALSE,
|
|
-- 0 value for valid_till indicates that the link never expires.
|
|
valid_till bigint not null DEFAULT 0,
|
|
-- 0 device limit indicates no limit
|
|
device_limit int not null DEFAULT 0,
|
|
created_at bigint NOT NULL DEFAULT now_utc_micro_seconds(),
|
|
updated_at bigint NOT NULL DEFAULT now_utc_micro_seconds(),
|
|
CONSTRAINT fk_public_tokens_collection_id
|
|
FOREIGN KEY (collection_id)
|
|
REFERENCES collections (collection_id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS public_active_collection_unique_idx ON public_collection_tokens (collection_id, is_disabled) WHERE is_disabled = FALSE;
|
|
CREATE UNIQUE INDEX IF NOT EXISTS public_access_tokens_unique_idx ON public_collection_tokens (access_token);
|
|
|
|
CREATE TABLE IF NOT EXISTS public_collection_access_history
|
|
(
|
|
share_id bigint,
|
|
ip text not null,
|
|
user_agent text not null,
|
|
created_at bigint NOT NULL DEFAULT now_utc_micro_seconds(),
|
|
CONSTRAINT unique_access_sid_ip_ua UNIQUE (share_id, ip, user_agent),
|
|
CONSTRAINT fk_public_history_token_id
|
|
FOREIGN KEY (share_id)
|
|
REFERENCES public_collection_tokens (id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS public_access_share_id_idx ON public_collection_access_history (share_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS public_abuse_report
|
|
(
|
|
share_id bigint,
|
|
ip text not null,
|
|
user_agent text not null,
|
|
url text not null,
|
|
reason text not null,
|
|
u_comment varchar(10000) not null DEFAULT '',
|
|
created_at bigint NOT NULL DEFAULT now_utc_micro_seconds(),
|
|
CONSTRAINT unique_report_sid_ip_ua UNIQUE (share_id, ip, user_agent),
|
|
CONSTRAINT fk_public_abuse_report_token_id
|
|
FOREIGN KEY (share_id)
|
|
REFERENCES public_collection_tokens (id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS public_abuse_share_id_idx ON public_abuse_report (share_id);
|
|
|
|
CREATE TRIGGER update_public_collection_tokens_updated_at
|
|
BEFORE UPDATE
|
|
ON public_collection_tokens
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE
|
|
trigger_updated_at_microseconds_column();
|
|
|
|
CREATE OR REPLACE FUNCTION fn_update_collections_updation_time_using_update_at() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
--
|
|
IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN
|
|
UPDATE collections SET updation_time = NEW.updated_at where collection_id = new.collection_id and
|
|
updation_time < New.updated_at;
|
|
RETURN NEW;
|
|
END IF;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER trigger_collection_updation_time_on_collection_tokens_updated
|
|
AFTER INSERT OR UPDATE
|
|
ON public_collection_tokens
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE
|
|
fn_update_collections_updation_time_using_update_at(); |