Я занимаюсь обменом криптовалюты, а также внутренних "валют" сайтов
В данный момент создается мини-апп для телеграм, для приема заявок от клиентов.
Ниже поясню существующую структуру, для более легкого понимания в самой сути задачи
В базе данных есть несколько сущностей:
- Валюта
- Банк
- Сайт
- Аккаунт на сайте
- Платежный метод
- Направление обмена
- Реквизит
Валюта - это то, что пользователь отдает обменнику
Платежный метод - то, куда пользователь хочет получить выплату (например, USDT)
Банк - подкатегория, привязанная к платежному методу
Направление - связка "валюта->платежный метод"
Аккаунт - это аккаунт пользователя на сторонней платформе, менеджмент над которым ведет сервис. Сайт - сама сторонняя платформа.
У аккаунтов привязанных к определенным сайтам может быть баланс. Текущий баланс подтягивается с внешнего источника по API, также ведется учет средств, которые не были выплачены в прошлом платежном периоде, и учет средств, которые были выплачены в этом платежном периоде. Доступный к выплате баланс = текущий баланс + не выплачено в прошлом периоде - выплачено в этом периоде
Сайт может быть привязан к валюте.
У каждого сайта и у каждой валюты могут быть свои условия для создания заявки. На данный момент опции следующие:
- Создание заявки невозможно (обмен через оператора)
- Необходима загрузка файла
- Если к валюте привязан сайт, то необходимо указать какой аккаунт используется в заявке на обмен
- Если у привязанного сайта включена опция, то нужно проверять доступный баланс и списывать его во внутреннем учете (реальные транзакции не создаются) с баланса аккаунта
При создании заявки пользователь может указать несколько валют входа (минимум одна), и один платежный метод куда он хочет получить выплату. Также необходимо указать реквизит.
Вместе с каждой валютой входа могут быть переданы дополнительные данные, необходимые для создания заявки (файл, айдишник аккаунта)
Необходимо реализовать несколько пользовательских эндпоинтов:
- Создание заявки
---- Загруженные файлы временно сохраняются на сервер, сервер в фоне отгружает из в S3 и привязывает ключ из S3 к "части" обмена. Загрузка в S3 с фронта по pre-signed ссылке невозможна, так как хранение планируется в Amazon, так что такой подход может спровоцировать проблемы с загрузкой для юзеров с РФ
- Отмена заявки (с откатом балансов аккаунтов, если необходимо)
- получение информации о заявке
- подтверждение получения оплаты / финальное завершение заявки
Также несколько админских эндпоинтов
- Создание заявки (без загрузки файлов. передается почти такая же информация о заявке как и в клиентском эндпоинте, но дополнительно передается ID клиента, а также может быть передана скидка)
- изменение статуса заявки (откат балансов при отмене заявки)
- Добавление файла подтверждения оплаты (можно просто хватать id файла с S3 - у операторов нет проблем с доступом к амазону)
На текущий момент есть FastAPI проект, также есть черновой вариант эндпоинта создания заявки (в целом, рабочий. в целом, костыльный) - эндпоинты нужно реализовывать именно в нем
Также отдельно админка на Django (django не управляет бизнес-логикой / миграциями - просто подключение к БД для CRUD операций, а также выдача админского JWT. В саму админку вкостылен дашборд на реакте, который уже будет общаться с админскими эндпоинтами) - доступ к репу админки дам просто для удобства