Skip to content

rfxxfy/Byte-Battle

Repository files navigation

Byte-Battle

Byte-Battle - это онлайн-платформа, где программисты могут доказывать, кто быстрее решает алгоритмические задачи. В игровом режиме от 2 участников получают матч из нескольких задач (до 20) - кто первым решает текущую задачу, продвигает игру к следующей. Побеждает быстрый и сообразительный.

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

Byte-Battle - это не просто кодинг, а азартные и полезные баттлы, идеально подходящие для учёбы, соревнований с друзьями или быстрого роста как инженера.

Цели проекта

  • Реализовать онлайн-игры для решения алгоритмических задач на скорость (2–50 игроков).
  • Ввести режим индивидуальных тайм-трейлов для самостоятельной практики.
  • Автоматизировать проверку решений и начисление очков.
  • Создать систему рейтинга пользователей.
  • Сделать удобный и простой интерфейс.

Предварительные требования

  • Go 1.26 или выше
  • Docker и Docker Compose

Настройка

  1. Клонируйте репозиторий:

    git clone <repository-url>
    cd Byte-Battle
  2. Поднимите инфраструктуру (PostgreSQL + Swagger UI):

    docker compose up -d --wait
  3. Примените миграции:

    make migrate-up

По умолчанию приложение подключается к postgres://bytebattle:bytebattle@localhost:5432/bytebattle?sslmode=disable - это значение docker-compose.yaml. Для другого окружения задайте переменную DB_DSN (или создайте .env на основе .env.example).

Email-коды входа (Resend)

По умолчанию (без RESEND_API_KEY) коды подтверждения не отправляются во внешнюю почту и печатаются в логах сервера.

Чтобы включить реальную отправку email:

  1. Создайте аккаунт в Resend и получите API ключ.
  2. Добавьте в .env:
    • RESEND_API_KEY=re_...
    • FROM_EMAIL=Byte Battle <noreply@yourdomain.com>
  3. Убедитесь, что домен отправителя верифицирован в Resend.

После этого коды будут отправляться на email через Resend API.

Запуск

make run      # запустить сервер
make build    # собрать бинарник в bin/bytebattle

Проверьте, что сервер работает:

curl http://localhost:8080/

Swagger UI доступен на http://localhost:8081.

Тесты

make test        # unit + e2e
make test-unit   # только unit
make test-e2e    # только e2e (testcontainers, требует Docker)

E2e-тесты автоматически поднимают PostgreSQL через testcontainers - Docker Compose для тестов не нужен.

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

cmd/bytebattle/          # Точка входа приложения
internal/
  api/                   # Сгенерированные типы и интерфейсы из openapi.yaml
  apierr/                # Типизированные ошибки API
  config/                # Конфигурация (env-переменные)
  db/
    queries/             # SQL-запросы для sqlc
    sqlc/                # Сгенерированный sqlc-код
  migrations/            # SQL-миграции (embed в binary, golang-migrate)
  problems/              # Загрузка задач и тест-кейсов из файловой системы
  server/                # HTTP-сервер, роуты, хендлеры
  service/               # Бизнес-логика
api/                     # OpenAPI-спецификация
problems/                # Файловый банк задач (problem.json + tests/*.in/*.out)
.env.example             # Пример переменных окружения
sqlc.yaml                # Конфиг генератора sqlc

Конфигурация

Приложение настраивается через переменные окружения:

Переменная По умолчанию Описание
DB_DSN postgres://bytebattle:bytebattle@localhost:5432/bytebattle?sslmode=disable DSN подключения к PostgreSQL
HTTP_HOST 0.0.0.0 Хост HTTP-сервера
HTTP_PORT 8080 Порт HTTP-сервера
PROBLEMS_DIR ./problems Путь к каталогу задач
RESEND_API_KEY `` API ключ Resend; если пустой, используется dev-mailer (код в логах)
FROM_EMAIL noreply@bytebattle.dev Email отправителя для писем с кодом

Для dev-окружения значения по умолчанию совпадают с docker-compose.yaml - никаких .env не нужно. Для задания кастомных значений создайте .env на основе .env.example - он загружается автоматически.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors