git.fiddlerwoaroof.com
db/schema.sql
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;