26 lines
793 B
PL/PgSQL
26 lines
793 B
PL/PgSQL
-- AlterTable
|
|
ALTER TABLE "Item" ADD COLUMN "boost" INTEGER NOT NULL DEFAULT 0;
|
|
|
|
-- loop over all existing votes and denormalize them
|
|
UPDATE "Item"
|
|
SET boost = subquery.boost
|
|
FROM (SELECT "ItemAct"."itemId", SUM("ItemAct".sats) AS boost
|
|
FROM "ItemAct"
|
|
WHERE "ItemAct".act = 'BOOST'
|
|
GROUP BY "ItemAct"."itemId") subquery
|
|
WHERE "Item".id = subquery."itemId";
|
|
|
|
CREATE OR REPLACE FUNCTION boost_after_act() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
-- update item
|
|
UPDATE "Item" SET boost = boost + NEW.sats WHERE id = NEW."itemId";
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
DROP TRIGGER IF EXISTS boost_after_act ON "ItemAct";
|
|
CREATE TRIGGER boost_after_act
|
|
AFTER INSERT ON "ItemAct"
|
|
FOR EACH ROW
|
|
WHEN (NEW.act = 'BOOST')
|
|
EXECUTE PROCEDURE boost_after_act(); |