Перейти к содержанию

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;