Korzina — это интеллектуальная система для поиска и сравнения товаров в различных магазинах. Проект помогает найти лучшие цены и оптимальный магазин для вашего списка покупок.
Это монорепозиторий, содержащий:
API сервис на FastAPI для поиска и сопоставления товаров с умным алгоритмом matching.
Основные возможности:
- 🔍 Интеллектуальный поиск товаров по названию
- 📊 4-уровневый алгоритм сопоставления (exact/partial matching)
- 💰 Определение оптимального магазина по цене
- 📡 REST API с автоматической документацией (Swagger/ReDoc)
- 🐳 Docker поддержка
- ✅ Полное покрытие тестами
Технологии: Python 3.13, FastAPI, Supabase (PostgreSQL), Pydantic, pytest
Нативное iOS приложение на Swift для удобного использования сервиса.
Архитектура: VIPER Модули:
- 🏠 MainModule - главный экран
- 🛒 BasketModule - корзина покупок
- 🏪 ShopModule - выбор магазина
- 👤 ProfileModule - профиль пользователя
- ⚡ StartModule - стартовый экран
Технологии: Swift, UIKit, VIPER
cd korzina_offers
# Установка зависимостей
pip install -r requirements.txt
# Настройка окружения
cp .env.example .env
# Заполните SUPABASE_URL и SUPABASE_KEY
# Запуск сервера
python main.pyAPI будет доступен по адресу: http://localhost:5000
Документация: http://localhost:5000/docs
cd KorzinaApp
# Откройте проект в Xcode
open KorzinaApp.xcodeproj
# Запустите проект через Xcode (⌘R)| Метод | Endpoint | Описание |
|---|---|---|
GET/POST |
/api/health |
Проверка работы сервера |
GET |
/api/stats |
Статистика БД |
GET |
/api/offers |
Список офферов с фильтрами |
POST |
/api/search |
Поиск товаров (основной) |
GET |
/api/search/get |
Поиск товаров (упрощенный) |
# Поиск товаров
curl -X POST http://localhost:5000/api/search \
-H "Content-Type: application/json" \
-d '{"products": ["яблоки", "молоко", "хлеб"]}'Система использует умный 4-уровневый алгоритм:
- Точное совпадение (similarity: 1.0)
- Частичное совпадение с стоп-словами (≥ 0.7)
- Точное совпадение без стоп-слов (0.9)
- Частичное совпадение без стоп-слов (≥ 0.4-0.6)
Автоматически фильтруются описательные слова: "свежий", "большой", "спелый" и др.
- Framework: FastAPI 0.115.0
- Server: Uvicorn
- Database: Supabase (PostgreSQL)
- Validation: Pydantic 2.9+
- Testing: pytest, httpx
- Code Quality: mypy, black, flake8
- Language: Swift
- Architecture: VIPER
- UI: UIKit
- Custom fonts: Inter, Montserrat
cd korzina_offers
pytest
# С покрытием
pytest --cov=app --cov-report=htmlcd korzina_offers
docker build -t korzina-api .
docker run -p 5000:5000 --env-file .env korzina-apiSUPABASE_URL=your_supabase_url
SUPABASE_KEY=your_supabase_key
PORT=5000
DEBUG=true
PENALTY_PRICE=1000.0┌─────────────────┐
│ iOS App │
│ (Swift) │
└────────┬────────┘
│ HTTP/REST
▼
┌─────────────────┐
│ FastAPI Server │
│ (Python) │
└────────┬────────┘
│ PostgreSQL
▼
┌─────────────────┐
│ Supabase DB │
│ (PostgreSQL) │
└─────────────────┘
- Создайте Pydantic модель в
korzina_offers/app/models/ - Добавьте бизнес-логику в
korzina_offers/app/services/ - Создайте API endpoint в
korzina_offers/app/api/routes.py - Напишите тесты в
korzina_offers/tests/
- Создайте новый модуль следуя VIPER архитектуре
- Зарегистрируйте модуль в
RootTabFactory.swift(если нужен в TabBar) - Добавьте необходимые ассеты в
Assets.xcassets/
MIT License
Документация подпроектов:
- Backend API →
- iOS приложение (см. KorzinaApp/)