Добавляешь сущность "кошелек", в которой будет лежать итоговое значение суммы (по умолчанию 0);
Добавляешь сущность "операция", которая будет отражать поступление и расходование бонусных баллов;
При любом движении баллов изменяешь сумму в кошельке.
Для отслеживания движений имеет смысл завести отдельную таблицу.
id, user_id, sum, type, status, comments, source, date_create, date_confirm где:
- id - идентификатор операции
- user_id - ид пользователя
- sum - сумма операции
- type - тип операции: пополнение/списание
- status - подтверждена/не подтверждена
- comments - комментарий к движению
- source - источник движения
- date_create/date_confirm - дата создания/подтверждения операции
Собственно при регистрации пользователя делаешь движение с поступлением бонусов;
Потом изменяешь данные для кошелька;
Потом пишешь любое движение в таблицу и изменяешь состояние кошелька.
В самом простом случае можно сделать прям через один класс, но это не очень комильфо.