Все проекты

Fantasy League Backend

Fantasy-футбол платформа. Пользователи собирают виртуальные команды из реальных игроков и зарабатывают очки по результатам настоящих матчей.

3 уровня рейтинговИдемпотентная обработкаAdvisory Locks

Бизнес-задача

Fantasy-спорт платформа, где пользователи создают виртуальные команды из реальных футболистов, зарабатывают очки на основе реальных матчей, участвуют в турнирах и создают приватные лиги с друзьями.

Ключевая задача

Обработка результатов матчей в реальном времени с идемпотентной обработкой, распределённые фоновые задачи для горизонтального масштабирования, гибкие правила подсчёта очков.

Подсчёт очков

Интеграция с внешним футбольным API.
  • Опрос с дельтой: каждые 5 минут, обрабатываются только изменившиеся матчи
  • Идемпотентность: повторная обработка событий не дублирует очки
  • Карточки игроков: автоматический пересчёт очков после каждого матча
  • Три уровня рейтингов: глобальный / по турниру / по раунду

Система очков

Гибкие правила начисления.
  • По позиции: разные правила для вратарей, защитников, полузащитников, нападающих
  • По событиям: голы, ассисты, жёлтые/красные карточки, сыгранные минуты
  • Множители: капитан (×2), вице-капитан (×1.5)
  • Настройки турнира: кастомные правила для каждого турнира

Управление командой

  • Драфт: выбор состава и формации перед турниром
  • Состав по раундам: смена формации между раундами
  • Трансферы: лимит трансферов и бюджет
  • Формации: 4-3-3, 4-4-2, 3-5-2 и другие

Фоновые задачи

Планировщик на горутинах с защитой от дублирования.
  • PostgreSQL Advisory Locks: распределённые блокировки для горизонтального масштабирования
  • Состояние турнира: автоматическая смена статусов по расписанию
  • Популярность игроков: динамический расчёт на основе трансферов

Технологии

Backend

Go 1.24FastHTTPpgx/v5 + pgxpoolgo-playground/validator

Data

PostgreSQLgolang-migrateAWS S3

Integrations

GoalsFeed APIVK OAuthSMTP (gomail)

Observability

Elastic APMPrometheusZap (structured logs)

Моя роль

  • Архитектура backend с нуля: слоистая архитектура (handlers → services → repositories)
  • Движок подсчёта очков с идемпотентной обработкой и дельта-обновлениями
  • PostgreSQL Advisory Locks для распределённых фоновых задач
  • Интеграция с внешним футбольным API и VK OAuth