wallet_credit¶
Сигнатура: wallet_credit("p_user_id" "uuid", "p_amount" numeric, "p_kind" "text" DEFAULT 'credit'::"text", "p_meta" "jsonb" DEFAULT '{}'::"jsonb") RETURNS "jsonb"
Язык: sql
Security: DEFINER
Тело функции¶
declare
new_balance numeric;
tx_id uuid;
begin
if p_amount is null or p_amount <= 0 then
raise exception 'INVALID_AMOUNT';
end if;
perform public.ensure_wallet(p_user_id);
update public.wallets
set balance = balance + p_amount, updated_at = now()
where user_id = p_user_id
returning balance into new_balance;
insert into public.wallet_tx(user_id, amount, kind, meta)
values (p_user_id, p_amount, coalesce(p_kind,'credit'), coalesce(p_meta,'{}'::jsonb))
returning id into tx_id;
return jsonb_build_object('ok', true, 'tx_id', tx_id, 'balance', new_balance);
end;