RESTful API для управления банковскими счетами и переводами между ними. Подходит для использования в высоконагруженных финансовых системах.
- Python 3.10+
- Django 4.x + DRF
- PostgreSQL
- Kafka (Apache Kafka) — публикация событий
- Docker + docker-compose
- JWT авторизация
git clone https://github.com/NeewMeta88/fintech.git
cd fintechpython -m venv venv
source venv/bin/activate # или venv\Scripts\activate для Windows
pip install -r requirements.txtПример содержимого:
SECRET_KEY=your-secret-key
DEBUG=True
POSTGRES_DB=bank_db
POSTGRES_USER=bank_user
POSTGRES_PASSWORD=bank_pass
KAFKA_KRAFT_MODE=true
KAFKA_CFG_PROCESS_ROLES=broker,controller
KAFKA_CFG_NODE_ID=1
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
ALLOW_PLAINTEXT_LISTENER=yes
docker-compose up --buildПроект будет доступен по адресу: http://localhost:8000
| URL | Описание | Аутентификация |
|---|---|---|
/register/ |
Страница регистрации пользователя | ❌ Нет |
/ |
Страница входа (логин) | ❌ Нет |
/dashboard/ |
Панель управления пользователя | ✅ Да |
/api/transactions/open-transaction-form/ |
HTML-форма создания транзакции | ✅ Да |
/api/accounts/detail/{uuid}/ |
Открытие HTML-страницы с деталями счёта | ✅ Да |
На странице создания транзакций создано 2 варианта переводов:
- Себе - тогда вы выбираете аккаунт из дропбокса
- Другому - тогда надо ввести id аккаунта
Проведите миграции:
docker-compose exec web python manage.py migrateДобавляется:
- суперпользователь
admin(пароль:admin) - пользователь
test(пароль:test) - 3 счёта пользователю
admin - 1 счет пользователю
test
Запуск тестов:
docker-compose exec web python manage.py test app/Проверяется:
- корректность бизнес-логики транзакций
- сохранение данных
- обработка ошибок
| Метод | URL | Описание | Аутентификация |
|---|---|---|---|
| GET | /api/accounts/ |
Получение счетов текущего пользователя | ✅ Да |
| POST | /api/accounts/ |
Создание нового счёта | ✅ Да |
| DELETE | /api/accounts/{id}/ |
Удаление счёта (если баланс = 0) | ✅ Да |
| GET | /api/accounts/all |
Получение всех счетов (только для суперпользователя) | ✅ Да |
| GET | /api/transactions/list/ |
Получение списка транзакций текущего пользователя | ✅ Да |
| POST | /api/transactions/create/ |
Создание транзакции | ✅ Да |
| POST | /api/token/ |
Получение JWT-токена | ❌ Нет |
| POST | /register/ |
Регистрация нового пользователя | ❌ Нет |
| POST | / |
Вход пользователя | ❌ Нет |
| GET | /logout/ |
Выход пользователя | ✅ Да |
- Нельзя переводить средства самому себе (на тот же счет)
- Сумма перевода должна быть положительной
- Недостаточный баланс — ошибка
- После перевода событие публикуется в Kafka (топик
transactions)
Каждая транзакция отправляется в Kafka-топик transactions:
{
"id": "uuid",
"from_account": "uuid",
"to_account": "uuid",
"amount": 500.00,
"created_at": "2025-07-15T12:00:00Z"
}Kafka запускается в составе docker-compose.
Эндпоинт /api/transactions/list/ возвращает список транзакций (только для суперпользователя), которые были совершены в отношении пользователя (получение/отправление средств).
Полезно для пользователей - они видят, что происходит со средствами на их счетах.
🔐 Получить токен (JWT)
curl -X POST http://localhost:8000/api/token/ \
-H "Content-Type: application/json" \
-d '{"username": "your_username", "password": "your_password"}'🏦 Создать счёт
curl -X POST http://localhost:8000/api/accounts/ \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{}'owner_name не требуется — оно подставляется автоматически как username(index).
💸 Создать перевод между счетами
curl -X POST http://localhost:8000/api/transactions/create/ \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"from_account": "<UUID_отправителя>",
"to_account": "<UUID_получателя>",
"amount": 100.0
}'🔁 Получить историю переводов
curl -X GET http://localhost:8000/api/transactions/list/ \
-H "Authorization: Bearer <token>"📂 Получить список своих счетов
curl -X GET http://localhost:8000/api/accounts/ \
-H "Authorization: Bearer <token>"🗑 Удалить счёт (если баланс = 0)
curl -X DELETE http://localhost:8000/api/accounts/<UUID>/ \
-H "Authorization: Bearer <token>"Родионов Егор Михайлович