fistful-server/README.md

52 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2018-06-12 14:49:46 +00:00
# Fistful
> Wallet Processing Service
2018-06-25 15:39:47 +00:00
## Development plan
2018-06-12 14:49:46 +00:00
2018-06-25 15:39:47 +00:00
### Бизнес-функционал
* [x] Минимальный тестсьют для кошельков
2018-06-27 16:57:17 +00:00
* [x] Реализовать честный identity challenge
* [x] Запилить payment provider interface
2018-07-06 09:06:46 +00:00
* [ ] Запилить контактные данные личности
* [x] Запилить нормально трансферы
* [ ] Заворачивать изменения в единственный ивент в рамках операции
* [.] Компактизировать состояние сессий
2018-06-25 15:39:47 +00:00
* [ ] Запилить контроль лимитов по кошелькам
* [ ] Запилить авторизацию по активной идентификации
* [ ] Запилить отмену identity challenge
2018-06-25 15:39:47 +00:00
* [ ] Запускать выводы через оплату инвойса провайдеру выводов
* [ ] Обслуживать выводы по факту оплаты инвойса
### Корректность
2018-06-27 16:57:17 +00:00
* [.] Схема хранения моделей
* [ ] [Дегидратация](#дегидратация)
2018-06-25 15:39:47 +00:00
* [ ] [Поддержка checkout](#поддержка-checkout)
2018-06-29 10:10:13 +00:00
* [ ] [Коммуналка](#коммуналка)
2018-06-25 15:39:47 +00:00
### Удобство поддержки
* [ ] Добавить [служебные лимиты](#служебные-лимиты) в рамках одного party
2018-07-06 09:06:46 +00:00
* [ ] Добавить ручную прополку для всех асинхронных процессов
2018-06-25 15:39:47 +00:00
* [ ] Вынести _ff_withdraw_ в отдельный сервис
* [ ] Разделить _development_, _release_ и _test_ зависимости
* [ ] Вынести части _ff_core_ в _genlib_
## Поддержка checkout
Каждая машина, на которую мы можем сослаться в рамках асинхронной операции, должно в идеале давать возможность афиксировать версию_ своего состояния посредством некой _ревизии_. Получение состояния по _ревизии_ осуществляется с помощью вызова операции _checkout_. В тривиальном случае _ревизия_ может быть выражена еткой времени_, в идеале омером ревизии_.
2018-06-29 10:10:13 +00:00
## Коммуналка
Сервис должен давать возможность работать ескольким_ клиентам, которые возможно не знают ничего друг о друге кроме того, что у них разные _tenant id_. В идеале _tenant_ должен иметь возможность давать знать о себе _динамически_, в рантайме, однако это довольно трудоёмкая задача. Если приводить аналогию с _Riak KV_, клиенты к нему могут: создать новый _bucket type_ с необходимыми характеристиками, создать новый _bucket_ с требуемыми параметрами N/R/W и так далее.
## Дегидратация
В итоге как будто бы не самая здравая идея. Есть ощущение, что проще и дешевле хранить и оперировать идентификаторами, и разыменовывать их каждый раз по необходимости.
## Служебные лимиты
Нужно уметь _ограничивать_ максимальное _ожидаемое_ количество тех или иных объектов, превышение которого может негативно влиять на качество обслуживания системы. Например, мы можем считать количество _выводов_ одним участником неограниченным, однако при этом неограниченное количество созданных _личностей_ мы совершенно не ожидаем. В этом случае возможно будет разумно ограничить их количество сверху труднодостижимой для подавляющего большинства планкой, например, в 1000 объектов. В идеале подобное должно быть точечно конфигурируемым.