Skip to content

IlyaShaposhnikov/wallet-api

Repository files navigation

Wallet REST API

Приложение предоставляет REST API для работы с балансом пользовательских кошельков.

Быстрый старт

1. Клонирование и настройка

git clone git@github.com:IlyaShaposhnikov/wallet-api.git
cd wallet-api
# (Для локальной разработки вне Docker, если нужно)
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt

2. Настройка переменных окружения

Создайте файл .env в корне проекта, основываясь на примере .env.example. Это позволит вам настроить параметры подключения к базе данных. Если файл .env отсутствует, будут использованы значения по умолчанию, определённые в app/config.py.

3. Запуск в Docker

docker-compose up --build

Приложение будет доступно по адресу: http://localhost:8080 (http://127.0.0.1:8080)

4. Документация API

После запуска откройте: http://localhost:8080/docs (http://127.0.0.1:8080/docs)

Основные функции API

Получение баланса

GET /api/v1/wallets/{wallet_id}

Изменение баланса

POST /api/v1/wallets/{wallet_id}/operation

Тело запроса:

{
  "operation_type": "DEPOSIT" или "WITHDRAW",
  "amount": 1000.50
}

Тестирование

Запуск тестов

docker-compose up tests

Технологии

  • FastAPI - асинхронный веб-фреймворк
  • SQLAlchemy 2.0 + asyncpg - асинхронная работа с PostgreSQL
  • Alembic - миграции базы данных
  • Docker & Docker Compose - контейнеризация
  • Pytest + httpx - тестирование
  • Pydantic v2 - валидация данных

Конкурентность

Приложение гарантирует корректную работу при параллельных запросах благодаря:

  • Транзакциям уровня READ COMMITTED
  • Блокировкам SELECT FOR UPDATE
  • Атомарным операциям изменения баланса

Структура проекта

wallet-api/
├── app/
│   ├── repositories/     # Слой доступа к данным
│   ├── schemas.py        # Pydantic-схемы
│   ├── models.py         # Модели SQLAlchemy
│   ├── database.py       # Настройка БД
│   ├── config.py         # Конфигурация
│   └── main.py           # Основное приложение
├── tests/                # Тесты
├── alembic/              # Миграции
├── scripts/              # Вспомогательные скрипты
├── docker-compose.yml    # Docker-оркестрация
└── Dockerfile            # Docker образ

Автор

Шапошников Илья ilia.a.shaposhnikov@gmail.com

About

A FastAPI-based REST API for managing user wallet balances with secure concurrent transaction handling using SELECT FOR UPDATE to ensure data integrity, built with asynchronous PostgreSQL and Docker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors