Update monetary limits for numeric precision in BaseWorker and UserCharacterWorker: Changed maximum absolute values from numeric(10,2) to numeric(14,2) to accommodate larger monetary amounts. Adjusted related comments and clamping logic to reflect the new limits, ensuring accurate handling of monetary values.
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 2m19s

This commit is contained in:
Torsten Schulz (local)
2026-05-06 11:04:45 +02:00
parent 43eb6ed0ab
commit 8509a7e171
6 changed files with 103 additions and 13 deletions

View File

@@ -0,0 +1,76 @@
-- Erhoeht Geld-Praezision fuer sehr hohe Kontostaende.
-- Ziel: max. Betrag von 99.999.999,99 auf 999.999.999.999,99 anheben.
-- Hauptkontostand
ALTER TABLE falukant_data.falukant_user
ALTER COLUMN money TYPE NUMERIC(14,2);
-- Verlaufseintraege (best effort-Logging im Daemon)
ALTER TABLE falukant_log.money_history
ALTER COLUMN change TYPE NUMERIC(14,2);
-- Moneyflow auf dieselbe Praezision bringen (falls die Tabelle existiert).
ALTER TABLE IF EXISTS falukant_log.moneyflow
ALTER COLUMN money_before TYPE NUMERIC(14,2),
ALTER COLUMN money_after TYPE NUMERIC(14,2),
ALTER COLUMN change_value TYPE NUMERIC(14,2);
-- Kernfunktion auf neue Praezision umstellen.
CREATE OR REPLACE FUNCTION falukant_data.update_money(
p_falukant_user_id integer,
p_money_change numeric,
p_activity text,
p_changed_by integer DEFAULT NULL::integer
)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
v_money_before numeric(14,2);
v_money_after numeric(14,2);
v_moneyflow_id bigint;
BEGIN
SELECT money
INTO v_money_before
FROM falukant_data.falukant_user
WHERE id = p_falukant_user_id;
IF NOT FOUND THEN
RAISE EXCEPTION 'FalukantUser mit ID % nicht gefunden', p_falukant_user_id;
END IF;
v_money_after := v_money_before + p_money_change;
INSERT INTO falukant_log.moneyflow (
falukant_user_id,
activity,
money_before,
money_after,
change_value,
changed_by,
time
)
VALUES (
p_falukant_user_id,
p_activity,
v_money_before,
NULL, -- wird gleich aktualisiert
p_money_change,
p_changed_by,
NOW()
)
RETURNING id INTO v_moneyflow_id;
UPDATE falukant_data.falukant_user
SET money = v_money_after
WHERE id = p_falukant_user_id;
UPDATE falukant_log.moneyflow
SET money_after = (
SELECT money
FROM falukant_data.falukant_user
WHERE id = p_falukant_user_id
)
WHERE id = v_moneyflow_id;
END;
$function$;