Простой сервис платежной системы.
Основные пользовательские сценарии:
- Регистрация (логин/пароль)
- Авторизация
- Просмотр состояния счетов (После регистрации в ЛК создается 3 счета USD, CNY, EUR, на первый счет сразу поступает депозит 100 USD)
- Перевод средств между своими счетами (без комиссии)
- Перевод средств со своего на любой счет других клиентов (с комиссией)
- Просмотр истории переводов (доступна фильтрация и сортировка)
Запуск проекта:
docker-compose up -d --build
docker-compose exec web python init_migration.py
Данный проект состоит из 3-й сервисов:
- NGINX
- POSTGRESQL
- BILLING (custom service GUNICORN + FLASK)
Приложение имеет 2 варианта api:
- SSR (Service site rendering) - для UI работы с данной системой. URL начинаются с "/"
- REST API - для подключения своего клиента. С возвратом правильных HTTPResponse-кодов. URL начинаются с "/api/"
По-умолчанию, приложение будет доступно по адресу: http://localhost:8080/
Для начала нужно зарегистрировать пользователя. В правом верхнем углу есть кнопка '#', либо можно сразу перейти по http://localhost:8080/#
После этого можно заходить под созданной учеткой в саму систему. [image]: https://ibb.co/CsMYX0k
Список url'в:
SSR:
GET /
GET /#
POST /# - вход пользователя {
form: email
password
}
GET /#
POST /# - создание пользователя {
form: email
name
password
}
GET /logout
GET /user/<user_id>/
POST /user/<user_id>/transaction/ - создание транзакции {
form: from - id счета с которого переводить
to - id счета на который переводить
amount - сумма
}
GET /user/<user_id>/transaction/
- имеется возможность сортировки и фильтрации, переданной query params:
- ?filter=user+<operation>+<user_id>&
- ?filter=created_at+<operation>+<date iso string>&
- ?filter=invoice+=+<invoice_id>
- ?sort=created_at+desc
можно комбинировать между собой
- ?filter=invoice+=+<invoice_id>&sort=created_at+desc
API:
POST /api/#/ - вход пользователя {
form: email
password
}
GET /api/user/<user_id>/ - получение информации о пользователе и его счетах
POST /api/user/<user_id>/transaction/ - создание транзакции {
form: from - id счета с которого переводить
to - id счета на который переводить
amount - сумма
}
GET /api/user/<user_id>/transaction/ - получение списка транзакций пользователя
- имеется возможность сортировки и фильтрации, переданной query params:
- ?filter=user+<operation>+<user_id>&
- ?filter=created_at+<operation>+<date iso string>&
- ?filter=invoice+=+<invoice_id>
- ?sort=created_at+desc
можно комбинировать между собой
- ?filter=invoice+=+<invoice_id>&sort=created_at+desc
Также сделано несколько нагрузочный тестов на неоптимизированном приложении поставленному "по-умолчанию" на (Mac os, i7). Результаты в test/stress/README.md.