added triggers for user balance calculation

This commit is contained in:
celso 2026-04-04 13:09:22 -03:00
parent 0f81113d65
commit 4ad165f4a7

View File

@ -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 ;