Skip to content

Пример организации баланса пользователей и операций с ним для веб-приложения

License

Notifications You must be signed in to change notification settings

mesilov/user-balance-accounts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 

Repository files navigation

user-balance-accounts

Пример организации баланса пользователей и операций с ним. В репозитории пример решения прикладной задачи связанной с хранением баланса клиентов абстрактного веб-сайта.

Целевая аудитория — разработчики, которым малый бизнес поставил задачу сделать на сайте или в мобильном приложении простую бонусную программу или внутренние счета, но не захотел покупать готовые отраслевые решения или экспертизу команд специализирующихся на финтехе.

Описание предметной области

Для бизнеса требуется хранить баланс своих клиентов. Для каждого аккаунта возможны операции списания и начисления бонусов. У пользователя может быть только один счёт. В зависимости от настроек начисленные бонусы могут сгорать через N дней. Вопросы пополнения \ списания в данном примере не расматриваются. Граница пролегает по API сервиса к которому поступают команды на управление балансом.

Оглавление

  1. Описание предметной области.
  2. Теоретическая часть про учёт денег.
  3. Термины предметной области.
  4. Требования к функциональности примера.
  5. Описание подхода к реализации сервиса.
  6. Схема базы данных с демонстрационными данными и характерными SQL-запросами.
  7. Пример реализации функционала на фреймворке Symfony в виде API-first сервиса. (А надо????)

Теория про учёт денег

Совет от Phil Delgyado, [16 Nov 2023 at 01:10:16]

Основное - хранить не только балансы, но и первичку, использовать транзакции, не использовать float для хранения денег, внимательно читать документацию по СУБД, в особенности про те же самые транзакции.

Ну и совещаться с юристами, там больше всего рисков )

Термины предметной области

Счёт

Сущность, которая хранит монетарный баланс и имеет уникальный идентифиатор.

Тип счёта

Классифиатор, который позволяет указать для чего конкретный счёт может быть использован: счет пользователя, виртуальный счёт системы, условный счёт предназначенный для «ввода\вывода» денежных средств из или в систему.

Владелец счёта

Под владельцем счёта может выступать как конкретный пользователь, система, так и юр.лицо, например.

Тип владельца счёта

Классифиатор, который позволяет указать по ккакому признаку объеденены владельцы счетов, например, это юр.лица или физ-лица.

Типы операций

транзакции с точки зрения бизнеса (начисления, списания, сгорание бонусов, ручное пополнение, ручное списание и т.д) которые требуется различать для отчётности и по разному обрабатывать.

Операционные периоды

период, за который данныне могут быть проверены на консистентность или выгружены в виде отчётов, обычно выбирается сутки

Операции

Журнал проводок для фиксации в виде двойной бухгалтерской записи.

Транзакции

Список задач с т.з. бизнеса которыми меняется состояние счетов. Пример: начисление по счёту за успешно выполненный заказ.

Функциональные требования

В этом разделе собираем требования к системе сгруппированные по сущностям и функциональным блокам.

1. Счета

  1. Счёт может быть в состоянии: активный или заблокирован, если счёт заблокирован, то операции по нему невозможны
  2. Счёт обслуживает поступления и списания только в одной валюте.
  3. По счёту возможен овердрафт: можно уйти в минус.

2. Пользователи

  1. Под пользователем понимается его уникальный идентификатор uuid
  2. У организации может быть до 10 000 000 пользователей.
  3. Пользователи могут создаваться и блокироваться в процессе операционной деятельности организации, блокирование пользователя приводит к блокированию связанного с ним счёта.

3. Операции

  1. Операция начисления производит начисление указанной суммы на счёт пользователя
  2. Операция списания производит списание указанной суммы со счёта пользователя
  3. Предполагаемая нагрузка составит менее 100 операций в секунду.

4. Отчёты

  1. Общая сумма денежных средств на активных и заблокированных счетах
  2. Баланс по конкретному счёту
  3. История операций по конкретному счёту
  4. Оборот начислений и списаний с группировкой по дням
  5. Оборот начислений и списаний с группировкой по неделям
  6. Оборот начислений и списаний с группировкой по месяцам
  7. Количество созданных и заблокированных счетов с группировкой по дням
  8. Количество созданных и заблокированных счетов с группировкой по неделям
  9. Количество созданных и заблокированных счетов с группировкой по месяцам

5. Требования к реализации системы

  1. Использование двойной бухгалтерской записи
  2. Использование реляционной СУБД

About

Пример организации баланса пользователей и операций с ним для веб-приложения

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published