Skip to content

Tech Stack & Concepts 🛠️

Добро пожаловать в техническое сердце Gifty. На этой странице мы собрали ключевые технологии и концепции, на которых стоит наш проект. Это ваша карта местности: не обязательно знать все детали сразу, но важно понимать, почему мы выбрали именно эти инструменты и как они связаны друг с другом.


🏗 Инфраструктура (Foundation)

Наш фундамент — это контейнеризация и надежные базы данных.

🐳 Docker & Docker Compose

Зачем: "It works on my machine" — больше не аргумент. Мы упаковываем всё в контейнеры. Весь проект (API, БД, Парсеры, Бот) поднимается одной командой docker-compose up -d. Если вы добавили новую библиотеку в requirements.txt, не забудьте пересобрать образ (docker-compose build).

👉 Гайд по локальному запуску

🐘 PostgreSQL + pgvector

Зачем: Это не просто хранилище данных, а наш поисковый движок. Мы используем PostgreSQL 16+ с расширением pgvector. Это позволяет нам хранить эмбеддинги (векторные представления) товаров и искать подарки по смыслу, а не только по ключевым словам.

Важно: Все запросы к БД — асинхронные (asyncpg).

👉 Работа с базой данных

🐰 RabbitMQ

Зачем: Асинхронная обработка тяжелых задач. Когда нужно спарсить 1000 товаров или отправить 500 уведомлений, мы не заставляем пользователя ждать. Мы кидаем задачу в очередь (RabbitMQ), а воркеры (отдельные процессы) разгребают её в фоне. Это делает API быстрым и отзывчивым.

👉 Архитектура парсинга и очередей

🔴 Redis

Зачем: Кэширование и временные данные. Здесь мы храним сессии пользователей, чтобы не дергать БД на каждый чих, и используем как брокер сообщений для Celery/TaskQueue в некоторых местах (или как быстрый кэш для часто запрашиваемых данных).


🐍 Бэкенд (Core)

Наш код написан на Python 3.11+, и мы используем современные асинхронные подходы.

⚡ FastAPI

Что это: Современный веб-фреймворк. Почему: Он быстрый (Starlette), типизированный (Pydantic) и автоматически генерирует документацию (Swagger UI). Мы любим его за Dependency Injection (Depends(...)) — это позволяет легко подменять компоненты (например, БД) в тестах.

🗃 SQLAlchemy 2.0 (Async)

Что это: ORM для работы с базой.

Важно: Мы используем стиль 2.0.

Старый стиль (не используем): session.query(User).filter(...)

Новый стиль (используем): await session.execute(select(User).where(...))

Это позволяет писать асинхронный код, который не блокирует сервер пока база думает.

📜 Pydantic V2

Что это: Валидация данных. Все входные и выходные данные описываются схемами. Это гарантирует, что если фронтенд прислал строку вместо числа, мы узнаем об этом сразу и с понятной ошибкой. V2 работает на Rust и очень быстр.

⚗️ Alembic

Что это: Миграции базы данных.

Правило крови: Никогда не меняйте структуру БД (таблицы, колонки) вручную через SQL. Всегда создавайте миграцию: alembic revision --autogenerate -m "Added status column"

👉 Как создавать миграции


🧠 Предметная область и AI

То, что делает Gifty уникальным.

🎁 GUTG (Grand Unified Theory of Gifting)

Это наша внутренняя философия подбора подарков. Мы оцениваем товары не просто как "Кружка", а по 10 осям: Романтичность, Практичность, Кринж, Эстетика и т.д. Это позволяет давать рекомендации типа "Хочу что-то милое, но полезное" (High Aesthetic + High Utility).

👉 Подробнее о философии GUTG

🕷 Scrapy (Parsers)

Для сбора данных мы используем фреймворк Scrapy. У нас два режима работы парсеров:

  1. Discovery: Быстро пробежаться по каталогу и найти новые ссылки на товары.
  2. Deep: Зайти в конкретный товар и скачать всё: цену, фото, описание.

👉 Как добавить новый парсер


🛠 Инструменты разработки и мониторинга

📅 Weeek

Наш таск-трекер. Аналог Jira/Trello. Все задачи, баги и планы живут там. У нас есть интеграция: бот может присылать уведомления о новых задачах.

👉 Интеграция с Weeek

🦔 PostHog

Аналитика продуктов. Мы не гадаем, мы смотрим данные. Куда кликают пользователи? На каком шаге отваливаются? PostHog дает ответы.

👉 Как подключить аналитику

🔭 Observability (Prometheus + Grafana + Loki)

  • Prometheus: Собирает метрики (сколько запросов в секунду, сколько ошибок 500).
  • Loki: Собирает логи. Если что-то упало, идем в Grafana искать трейсбэк.
  • Sentry: Ловит ошибки в реальном времени и шлет алерты в Telegram.

👉 Инфраструктура и секреты