From 4ad165f4a732a8947f61a24ffbc9057fe4a16dd7 Mon Sep 17 00:00:00 2001 From: celso Date: Sat, 4 Apr 2026 13:09:22 -0300 Subject: [PATCH] added triggers for user balance calculation --- sql/shard.sql | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/sql/shard.sql b/sql/shard.sql index 69d6c22..b3f17bf 100644 --- a/sql/shard.sql +++ b/sql/shard.sql @@ -40,3 +40,53 @@ INSERT INTO ledger_statuses (status_id, name) VALUES (2, 'ratified'), (3, 'disputed'), (4, 'settled'); + +DELIMITER // +CREATE TRIGGER after_ledger_insert +AFTER INSERT ON ledger +FOR EACH ROW +BEGIN + IF NEW.status_id = 1 THEN + UPDATE user_balances + SET total_pending = total_pending + NEW.amount + WHERE user_id = NEW.user_id AND currency_code = NEW.currency_code; + ELSEIF NEW.status_id IN (2, 4) THEN + UPDATE user_balances + SET total_confirmed = total_confirmed + NEW.amount + WHERE user_id = NEW.user_id AND currency_code = NEW.currency_code; + END IF; +END // +CREATE TRIGGER after_ledger_update +AFTER UPDATE ON ledger +FOR EACH ROW +BEGIN + IF OLD.status_id = 1 THEN + UPDATE user_balances SET total_pending = total_pending - OLD.amount + WHERE user_id = OLD.user_id AND currency_code = OLD.currency_code; + ELSEIF OLD.status_id IN (2, 4) THEN + UPDATE user_balances SET total_confirmed = total_confirmed - OLD.amount + WHERE user_id = OLD.user_id AND currency_code = OLD.currency_code; + END IF; + IF NEW.status_id = 1 THEN + UPDATE user_balances SET total_pending = total_pending + NEW.amount + WHERE user_id = NEW.user_id AND currency_code = NEW.currency_code; + ELSEIF NEW.status_id IN (2, 4) THEN + UPDATE user_balances SET total_confirmed = total_confirmed + NEW.amount + WHERE user_id = NEW.user_id AND currency_code = NEW.currency_code; + END IF; +END // +CREATE TRIGGER after_ledger_delete +AFTER DELETE ON ledger +FOR EACH ROW +BEGIN + IF OLD.status_id = 1 THEN + UPDATE user_balances SET total_pending = total_pending - OLD.amount + WHERE user_id = OLD.user_id AND currency_code = OLD.currency_code; + ELSEIF OLD.status_id IN (2, 4) THEN + UPDATE user_balances SET total_confirmed = total_confirmed - OLD.amount + WHERE user_id = OLD.user_id AND currency_code = OLD.currency_code; + END IF; +END // +DELIMITER ; + +