e2e8ff94 |
DROP TABLE IF EXISTS user_ak;
|
65ca43d9 |
DROP TABLE IF EXISTS user_subscriptions;
|
e2e8ff94 |
DROP TABLE IF EXISTS user_links;
DROP TABLE IF EXISTS users;
|
3975acac |
DROP TABLE IF EXISTS link_votes;
|
e7b832f1 |
CREATE TABLE users (
id SERIAL UNIQUE NOT NULL,
|
40eb88e8 |
name TEXT UNIQUE NOT NULL CHECK (name <> ''),
|
e7b832f1 |
password TEXT NOT NULL,
email TEXT NOT NULL,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS links;
CREATE TABLE links (
id SERIAL UNIQUE NOT NULL,
url TEXT NOT NULL,
title TEXT DEFAULT '',
posted TIMESTAMP DEFAULT current_timestamp,
PRIMARY KEY (id)
);
CREATE INDEX url_index ON links (url);
|
65ca43d9 |
CREATE TABLE user_subscriptions (
id SERIAL UNIQUE NOT NULL,
fro_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
to_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
CHECK (fro_id != to_id),
UNIQUE (fro_id, to_id),
PRIMARY KEY (id)
);
|
3975acac |
CREATE TABLE link_votes (
id SERIAL UNIQUE NOT NULL,
user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
link_id INTEGER NOT NULL REFERENCES links (id) ON DELETE CASCADE,
voted TIMESTAMP DEFAULT current_timestamp,
vote BIGINT DEFAULT 0,
UNIQUE (link_id,user_id,voted),
PRIMARY KEY (id)
);
|
e7b832f1 |
CREATE TABLE user_links (
id SERIAL UNIQUE NOT NULL,
|
65ca43d9 |
user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
link_id INTEGER NOT NULL REFERENCES links (id) ON DELETE RESTRICT,
|
e7b832f1 |
UNIQUE (user_id, link_id),
PRIMARY KEY (id)
);
|
e2e8ff94 |
CREATE TABLE user_ak (
id SERIAL UNIQUE NOT NULL,
generated TIMESTAMP DEFAULT current_timestamp,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
ak TEXT NOT NULL,
UNIQUE (user_id, ak),
PRIMARY KEY (id)
);
|
90db5b68 |
DROP VIEW IF EXISTS recently_active_users;
CREATE VIEW recently_active_users AS
WITH recent_users AS (
SELECT user_id,name,posted
FROM user_links
LEFT JOIN links ON link_id = links.id
RIGHT JOIN users ON user_id=users.id
WHERE posted > now() - interval '1 week'
ORDER BY posted desc, user_id)
|
927d7348 |
SELECT DISTINCT ON (user_id) user_id,name,posted FROM recent_users;
|