Разработать базу данных и REST API для доступа к ней

35 000 руб. за проект
05 ноября 2021, 14:22 • 9 откликов • 62 просмотра
Введение

Цель создания

Игра представляет из себя сборку .webasm для запуска ее в браузере ПК без скачивания конечного приложения. Разработка игры ведется на Unity 2021 для WebGL 2.0 в среде .NET 4.5.

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


Описание игры

Игра представляет из себя 2D платформер с тремя уровнями и c несколькими встроенными в эти уровни мини-играми. Главная цель игрока пройти все уровни, а целью прохождения каждого уровня является прохождения всех мини-игр в нем. Каждую мини-игру и каждый уровень игрок может пройти лишь единожды. На уровне так же расположены неуничтожаемые противники и собираемые монетки.

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


ТЗ на создание базы данных
Требуется создать реляционную БД, хранящую в себе набор следующих сущностей с их атрибутами (звездочкой выделены ключевые атрибуты сущностей):

  1. Пользователь:
    • *Уникальный ID (скорее всего, строка на подобии GUID)
    • Никнейм (уникальная строка)
  2. Результат мини-игры:
    • *ID мини-игры (неотрицательное целое)
    • *ID пользователя (неотрицательное целое – соотносится с сущностью «пользователь»)
    • Суммарное время (неотрицательное число с плавающей точкой)
    • Завершение (логическое значение)
  3. Сбор монетки:
    • *ID монетки (неотрицательное целое)
    • *ID пользователя (неотрицательное целое – соотносится с сущностью «пользователь»)
  4. Штраф:
    • ID пользователя (неотрицательное целое – соотносится с сущностью «пользователь»)
    • Суммарное время (неотрицательное число с плавающей точкой)
  5. Рейтинг:
    • *ID пользователя (строка – соотносится с сущностью «пользователь»)
    • Никнейм (строка – соотносится с сущностью «пользователь»)
    • Суммарное время (неотрицательное число с плавающей точкой - подсчитывается автоматически)

В качестве примера к данному документу прилагается пример такой БД в формате «Exel». Конечная структура и связи сущностей могут немного редактироваться в зависимости от рекомендаций разработчика.


ТЗ на создание API
Общие требования
Для доступа к БД из клиента, требуется разработать REST API. URI запросов рекомендуется организовывать по шаблону: /<ИМЯ_ТАБЛИЦЫ>/<ЗАПРОС>...


Основные запросы
Запросы к пользователям
  1. Вход в игру сбудет происходить с помощью авторизации на стороннем сервисе с помощью Open ID, таким образом игра уже при входе будет получать уникальный ID пользователя.

Соответственно нужен GET-запрос на получение пользователя по ID пользователя. В случае если в БД нет такого пользователя, то он должен быть туда записан с указанным ID и пустыми значениями остальных атрибутов 2. Для заполнения остальных полей пользователя нужен PUT-запрос с параметрами для заполнения недостающих данных


Запросы к мини-играм и результатам
  1. GET-запрос на получение всех результатов мини-игр, связанных с указанным ID пользователя
  2. PUT-запрос на запись результатов мини-игр, связанных с указанным ID пользователя. Если результаты мини-игр уже записаны в БД, то они перезаписываются

Запросы к монеткам и их сборам
  1. GET-запрос на получение всех собранных монеток указанным ID пользователя
  2. PUT-запрос на запись собранных монеток, связанных с указанным ID пользователя. Если собранные монетки уже записаны в БД, то ничего не происходит

Запросы к штрафам
  1. GET-запрос на получение суммарного времени штрафа для указанного ID пользователя
  2. PUT-запрос на запись/перезапись суммарного времени штрафа для указанного ID пользователя

Дополнительные запросы
  1. GET-запрос на получение топ-N рейтинга, где N - параметр запроса.

    Для подсчета рейтинга надо вначале подсчитать суммарное время каждого верифицированного (то есть, с НЕпустым никнеймом) пользователя.

    Время подсчитывается, как сумма времени всех результатов мини-игр связанных с данным пользователем и суммарного времени штрафа данного пользователя (сумма не можеn при этом быть отрицательной) за вычетом суммы стоимостей всех собранных данным пользователем монеток.

    Далее полученные рейтинги необходимо отсортировать по возрастанию полученного времени и вернуть в ответе на запрос первые N.

    В созданной для этого таблице должны размещаться только верифицированные пользователи. Таблица должна обновляться автоматически при записи сопутствующих данных в БД.


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


Требования к передаче продукта
Продукт должен быть предоставлен в формате Docker Compose, который мы будем разворачивать на своих серверах.
Файлы
Отзывы
R50 a4076681e481a0c0b993507a3ae8a0cd
Заказчик
Привлек внимание еще на этапе поиска исполнителя тем, что в отличие от многих соискателей вместо пустых "я крутой Full Stack, могу все и сразу и опыта у меня за троих!", сразу прочитал ТЗ и написал конкретно и внятно: "Сделаю БД так-то, API - вот так; Добавлю вот такие дополнения к БД; Время исполнения - вот столько." То есть, человек сразу показал понимание того, что, как и почему он будет делать для конкретной задачи. Задача была исполнена точно в срок, по ТЗ и без проблем (со стороны исполнителя, по крайней мере) работает; Так же безвозмездно была помощь по развертке БД на сервере, и разъяснению аспектов работы API. Все остальные личные/профессиональные характеристики - в звездочках (все 5). Рекомендуем к найму!
~ 1 год назад
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Фрилансер
Полное ТЗ, своевременная оплата, вежливый в общении работодатель. Рекомендую к сотрудничеству!
~ 1 год назад