Skip to content

theforps/Pixel_Battle_Go_Fullstack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 PROD
SERVER_MODE="PROD"

# server port
PORT="3030"

# min 1 max 256
BOARD_HEIGHT=16

# min 1 max 256
BOARD_WEIGHT=16

# user can push pixel
USER_CALLDOWN=30

# send push 
MESSAGE_CALLDOWN=60

# DB
CONNECTION_STRING="postgres://pixel_user:pixel_password@localhost:5432?sslmode=disable"

# DB NAME
DB_NAME="pixel_db"

# JWT key base64
SECRET_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

Watchers

Forks

Contributors