Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Pixel Battle

Огромное цифровое полотно, где каждый игрок может закрасить только один пиксель раз в определнное время. Главная цель — оставить свой след, создавая рисунки, объединяясь в команды с другими людьми. Это битва за пространство, где важно не только творить, но и защищать созданное от других игроков.

Что реализовано

  1. Хранение доски происходит в оперативной памяти. Максимально допустимый размер доски - 256x256 пикселей
  2. Регистрация и авторизация пользователя в системе на базе JWT
  3. Получение обновлений с сервера и отправка сообщений с помощью подключения по websocket
  4. Сообщения хранятся в очереди и рассылаюся по всем пользователям раз в заданное время. Сообщения хранят: текущий онлайн, изменения пикселей на доске, количество изменений раз в заданное время
  5. Интерфейс с регистрацией и авторизацией, отрисовкой полотна и изменения пикселей, получение изменения пикселей других пользователь и отрисовка в реальном времени, выбор цвета и счетчик онлайна

Что можно улучшить

  1. Хранение доски в постоянном хранилище с историей изменения каждого пикселя
  2. Рефакторинг и доработка frontend части для лучшего пользовательского опыта
  3. Ввод системы чанков для увеличения размера полотна из-за ограничений байтовых сообщений
  4. Вести историю изменения каждого пользователя для отката изменений
  5. Добавление админ-панели для модерации полотна

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

Конечные точки

POST /auth/login

  • Описание: авторизация пользователя
  • Тело запроса:
{
"login": "example",
"password": "example"
}
  • Успешный ответ (200 OK):
{
"statuscode": 200,
"message": "token"
}

POST /auth/signin

  • Описание: регистрация пользователя
  • Тело запроса:
{
"login": "example",
"password": "example"
}
  • Успешный ответ (200 OK):
{
"statuscode": 200,
"message": "OK"
}

GET /board

  • Описание: получение доски в виде матрицы
  • Тело ответа (200 OK): массив байт

GET /index

  • Описание: получение страницы с отображением доски
  • Успешный ответ (200 ОК): HTML страница

GET /login

  • Описание: получение страницы для авторизации пользователя
  • Успешный ответ (200 ОК): HTML страница

База данных

Конфигурация базы данных

  • База данных: PostgreSQL
  • Драйвер: postgres

Переменные окружения

# DEV PRODSERVER_MODE="PROD"# server portPORT="3030"# min 1 max 256BOARD_HEIGHT=16# min 1 max 256BOARD_WEIGHT=16# user can push pixelUSER_CALLDOWN=30# send push MESSAGE_CALLDOWN=60# DBCONNECTION_STRING="postgres://pixel_user:pixel_password@localhost:5432?sslmode=disable"# DB NAMEDB_NAME="pixel_db"# JWT key base64SECRET_KEY="MTIzNDU2Nzg5MA===="

Как запустить

Скопировать репозиторий

git clone https://github.com/theforps/Pixel_Battle_Go_Fullstack.git
cd Pixel_Battle_Go_Fullstack

Локальный запуск

  1. Скопировать конфигурацию переменных окружения:
cp .env.example .env
  1. Установить зависимости:
go mod download
go mod verify
  1. Запустить сервис:
# Запустить код
go run cmd/main.go
# Создать исполняемый файл и запустить
go build -o api cmd/main.go
./api

Сервис будет запущен по ссылке:http://localhost:3030

About

Pixel Battle is a massive online canvas where thousands of players take turns placing individual pixels, competing as teams to create art while constantly defending it from being painted over by others

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages