All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 2m19s
77 lines
2.0 KiB
PL/PgSQL
77 lines
2.0 KiB
PL/PgSQL
-- 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$;
|