s-prosvirnin / faceapp.test-task

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Тестовое задание

Описание

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

На старте командам выдаются конверты с login&password. С их помошью они логинятся в приложении и видят задания.

Каждое задание имеет:

  • название;
  • координаты, куда надо прибежать;
  • описание задания (текст до 300 символов без разметки);
  • поле для ввода ответа (каждый ответ - это строка, у каждого задания есть ровно один правильный ответ);
  • три подсказки (каждая подсказка - это текст без разметки до 300 символов).

Команды бегают по городу, решают задания. Решать задания можно в любой последовательности. Весь турнир длится 5 часов. Через 5 часов после начала приложение перестает принимать ответы от команд. Всего командам даются около 6-8 заданий.

На основном экране команда видит список всех заданий. По каждому заданию на этом экране есть:

  • Название;
  • Координаты;
  • Текст задания;
  • Статус: сдано, не начато, попытка сдачи (но неправильный ответ);
  • Поле для ввода ответа и кнопка для отправки ответа, если задание еще не сдано;
  • Список открытых подсказок;
  • Кнопка для открытия следующей подсказки, если задание еще не сдано и имеются доступные для открытия подсказки.

Отдельно есть экран с текущими результатам выступления всех команд. На этом экране указано время начала и конца турнира и есть большая таблица, в которой каждая строчка - это команда, а столбцы следующие:

  1. Текущее место команды
  2. Название команды
  3. Результаты по первому заданию
  4. Результаты по второму заданию ... N. Результаты по последнему заданию N+1. Количество сданных заданий N+2. Суммарное штрафное время

Штрафное время за каждое сданное задание считается как время, прошедшее с начала турнира до сдачи этого задания плюс 15 минут штрафа за каждую взятую подсказку, плюс 30 минут штрафа за каждую неверную попытку сдачи. Штрафное время за несданные задания не учитывается.

Команды сортируются по количеству сданных задач. Среди команд, с одинаковым количеством сданных задач по тому, у кого меньше штрафное время.

Вам необходимо разработать API для мобильного приложения для этого турнира. Клиентское приложение должно быть максимально тонким и все вычисления следует производить на стороне сервера. Документация к разработанному API может быть предоставлена в любом человеко-читаемом виде для мобильного разработчика по методам используемым на каждом из экранов.

Структура и разворачивание приложения

  • Необходим Go v1.19, Docker
  • Параметры для запуска прописаны в ./config/config.go (http, db параметры). Параметры подставляются из ./.env (который можно создать из ./examples/example.env).
  • Команды для старта приложения прописаны в ./Makefile
  • В качестве БД используется Postgres, ее можно поднять через Docker
  • Миграции для БД находятся в ./migrations/ устанавливаются автоматически через goose при старте приложения.
  • Примеры api запросов (в формате curl) можно посмотреть в ./examples/api_curl.sh.

About


Languages

Language:Go 99.1%Language:Makefile 0.9%