@disSpector

Как правильно добавить операцию переноса средств между счетами пользователя (финансовый калькулятор на Yii2)?

Всем привет.
Пишу что-то вроде финансового калькулятора на Yii2 для себя. Уже написал бОльшую часть функционала, но столкнулся с проблемой при добавлении новой фичи.
Итак, по задумке пользователь может добавлять свои финансовые операции и просматривать их. Для хранения операций в моей БД есть таблица 'operations':

id | user_id | category_id | source_id | sum | name | type | date

Расшифровка:
- category_id - id категории расходов/доходов пользователя (продукты, транспорт и т.д), внешний ключ на таблицу 'category', где есть описание всех категорий,

- source_id - id платежного средства пользователя (банковская карта, кошелек с наличными и т.д.), внешний ключ на таблицу 'sources', где есть описание всех средств,

- type - тип операции, где 1 - это расход, 2 - доход.

Когда пользователь переходит по адресу operation/create, он может создать новую операцию, выбрав ее тип (расход или доход), категорию, платежное средство, сумму, добавить описание и т.д.

Когда пользователь переходит по адресу operation/view, он может просматривать все свои операции, сгруппированные по датам. При щелчке на какую-либо операцию происходит переход к ее редактированию (operation/update).

Всё это работало замечательно, пока я не решил добавить новый тип операций - "перенос средств пользователя между счетами" (когда человек, например, решил снять деньги с карты и положить их в свой кошелек с наличными).

Сначала я решил реализовать это через сценарии Yii-модели (Active Record) Operations. То есть когда на странице operation/create пользователь выбирает пункт "Перенос средств между счетами", аяксом загружается форма, в которой есть поля "Источник 1", "Источник 2" и "Сумма".

При отправке этой формы я думал создавать в одной транзакции 2 операции (списание с одного счета + зачисление на другой счет). При создании этих двух операций проблем нет. Проблемы возникают на странице просмотра операций operation/view, где по логике будут отображены обе. И если пользователь решит обновить одну из них, мне нужно будет найти вторую и обновить ее. Мне показалось, что это не лучший способ.

Тогда я подумал, что, может быть, следует создать новую таблицу - 'transfers', где будут храниться только операции перевода с одного счета на другой. Но тогда возникает другая проблема - когда пользователь будет переходить на страницу просмотра операций operation/view, мне нужно будет отображать данные не только из таблицы 'operations', но и из таблицы 'transfers', сгруппированные по датам. Мне кажется, что такой подход тоже противоречит нормальной архитектуре приложения.

Поделитесь, пожалуйста, своим опытом - как лучше добавить функционал переноса средств между счетами?

Заранее спасибо.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
maksim92
@maksim92
Нашел решение — пометь вопрос ответом!
Пользователь вообще не должен редактировать такие операции. Если это просто учет каких-то финансов - то проблем тут критичных нет. Но если это работа с реальными средствами, то сразу же большая проблема. Представьте себя при взаимодействии с банкоматом. Приходите и редактируете себе баланс с 1 рубля на 1000 рублей)) Ну это будет странно.

Решение:
1. Убрать возможность редактирования вообще. Только + (пополнение) и - (снятие) ну и максимум удалить операцию, но тут надо только админам))
2. То же самое что и первое + добавить новый тип "перевод" и новую колонку transfer_id
При переводе мы вписываем в тип "перевод", а в колонку transfer_id добавляем id платежного средства пользователя (банковская карта, кошелек с наличными и т.д.), внешний ключ на таблицу 'sources', где есть описание всех средств
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 160 000 ₽
Blogman Санкт-Петербург
от 90 000 до 160 000 ₽
05 апр. 2020, в 12:19
3000 руб./за проект
05 апр. 2020, в 12:11
35000 руб./за проект
05 апр. 2020, в 12:06
5000 руб./за проект