diff options
author | Yorhel <git@yorhel.nl> | 2010-02-04 16:47:44 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2010-02-04 16:50:22 +0100 |
commit | 7255ee9b1febae2b845c5ade5af145fc234bc959 (patch) | |
tree | 01e954aee20cae97a0ca543efa3833a44838e69c /util | |
parent | 57a85d056e754cccec8ba338378f3852acaa2896 (diff) |
Notifications: Added notify for deletion of entries in (wish)list
Diffstat (limited to 'util')
-rw-r--r-- | util/sql/all.sql | 6 | ||||
-rw-r--r-- | util/sql/func.sql | 35 | ||||
-rw-r--r-- | util/updates/update_2.11.sql | 4 |
3 files changed, 41 insertions, 4 deletions
diff --git a/util/sql/all.sql b/util/sql/all.sql index c012eba2..da52f368 100644 --- a/util/sql/all.sql +++ b/util/sql/all.sql @@ -11,8 +11,8 @@ CREATE TYPE dbentry_type AS ENUM ('v', 'r', 'p'); CREATE TYPE edit_rettype AS (iid integer, cid integer, rev integer); CREATE TYPE language AS ENUM('cs', 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'tr', 'vi', 'zh'); CREATE TYPE medium AS ENUM ('cd', 'dvd', 'gdr', 'blr', 'flp', 'mrt', 'mem', 'umd', 'nod', 'in', 'otc'); -CREATE TYPE notification_ntype AS ENUM ('pm'); -CREATE TYPE notification_ltype AS ENUM ('t'); +CREATE TYPE notification_ntype AS ENUM ('pm', 'dbdel', 'listdel'); +CREATE TYPE notification_ltype AS ENUM ('v', 'r', 'p', 't'); CREATE TYPE producer_relation AS ENUM ('old', 'new', 'sub', 'par', 'imp', 'ipa', 'spa', 'ori'); CREATE TYPE release_type AS ENUM ('complete', 'partial', 'trial'); CREATE TYPE vn_relation AS ENUM ('seq', 'preq', 'set', 'alt', 'char', 'side', 'par', 'ser', 'fan', 'orig'); @@ -67,6 +67,8 @@ CREATE TRIGGER notify_pm AFTER INSERT ON threads_pos CREATE TRIGGER notify_dbdel AFTER UPDATE ON vn FOR EACH ROW EXECUTE PROCEDURE notify_dbdel(); CREATE TRIGGER notify_dbdel AFTER UPDATE ON producers FOR EACH ROW EXECUTE PROCEDURE notify_dbdel(); CREATE TRIGGER notify_dbdel AFTER UPDATE ON releases FOR EACH ROW EXECUTE PROCEDURE notify_dbdel(); +CREATE TRIGGER notify_listdel AFTER UPDATE ON vn FOR EACH ROW EXECUTE PROCEDURE notify_listdel(); +CREATE TRIGGER notify_listdel AFTER UPDATE ON releases FOR EACH ROW EXECUTE PROCEDURE notify_listdel(); -- Sequences used for ID generation of items not in the DB diff --git a/util/sql/func.sql b/util/sql/func.sql index 2c5c12b2..89494dd0 100644 --- a/util/sql/func.sql +++ b/util/sql/func.sql @@ -621,7 +621,7 @@ $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION notify_dbdel() RETURNS trigger AS $$ BEGIN -- item is deleted? - IF OLD.latest IS DISTINCT FROM NEW.latest AND NOT OLD.hidden AND NEW.hidden THEN + IF NOT OLD.hidden AND NEW.hidden THEN INSERT INTO notifications (ntype, ltype, uid, iid, subid, c_title, c_byuser) SELECT DISTINCT 'dbdel'::notification_ntype, (CASE TG_TABLE_NAME WHEN 'vn' THEN 'v' WHEN 'releases' THEN 'r' ELSE 'p' END)::notification_ltype, @@ -649,3 +649,36 @@ BEGIN END; $$ LANGUAGE plpgsql; + +-- called on UPDATE vn / releases +CREATE OR REPLACE FUNCTION notify_listdel() RETURNS trigger AS $$ +BEGIN + -- item is deleted? + IF NOT OLD.hidden AND NEW.hidden THEN + INSERT INTO notifications (ntype, ltype, uid, iid, subid, c_title, c_byuser) + SELECT DISTINCT 'listdel'::notification_ntype, + (CASE TG_TABLE_NAME WHEN 'vn' THEN 'v' ELSE 'r' END)::notification_ltype, + u.uid, NEW.id, c.rev, x.title, c.requester + -- look for users who should get this notify + FROM ( + -- voted on the VN + SELECT uid FROM votes WHERE TG_TABLE_NAME = 'vn' AND vid = NEW.id + -- VN in wishlist + UNION SELECT uid FROM wlists WHERE TG_TABLE_NAME = 'vn' AND vid = NEW.id + -- release in release list + UNION SELECT uid FROM rlists WHERE TG_TABLE_NAME = 'releases' AND rid = NEW.id + -- there's also a special case which we're ignoring here: + -- when a VN linked to a release in a user's release list is deleted + -- normally, the releases are also deleted, so a notify is generated anyway + ) u + -- fetch info about this edit + JOIN changes c ON c.id = NEW.latest + JOIN ( + SELECT id, title FROM vn_rev WHERE TG_TABLE_NAME = 'vn' AND vid = NEW.id + UNION SELECT id, title FROM releases_rev WHERE TG_TABLE_NAME = 'releases' AND rid = NEW.id + ) x ON c.id = x.id; + END IF; + RETURN NULL; +END; +$$ LANGUAGE plpgsql; + diff --git a/util/updates/update_2.11.sql b/util/updates/update_2.11.sql index 4b5f076c..d488e228 100644 --- a/util/updates/update_2.11.sql +++ b/util/updates/update_2.11.sql @@ -1,6 +1,6 @@ -CREATE TYPE notification_ntype AS ENUM ('pm', 'dbdel'); +CREATE TYPE notification_ntype AS ENUM ('pm', 'dbdel', 'listdel'); CREATE TYPE notification_ltype AS ENUM ('v', 'r', 'p', 't'); CREATE TABLE notifications ( @@ -107,4 +107,6 @@ CREATE TRIGGER notify_pm AFTER INSERT ON threads_pos CREATE TRIGGER notify_dbdel AFTER UPDATE ON vn FOR EACH ROW EXECUTE PROCEDURE notify_dbdel(); CREATE TRIGGER notify_dbdel AFTER UPDATE ON producers FOR EACH ROW EXECUTE PROCEDURE notify_dbdel(); CREATE TRIGGER notify_dbdel AFTER UPDATE ON releases FOR EACH ROW EXECUTE PROCEDURE notify_dbdel(); +CREATE TRIGGER notify_listdel AFTER UPDATE ON vn FOR EACH ROW EXECUTE PROCEDURE notify_listdel(); +CREATE TRIGGER notify_listdel AFTER UPDATE ON releases FOR EACH ROW EXECUTE PROCEDURE notify_listdel(); |