План выполнения

ФИОНазвание сервисаКраткое описаниеСрок выполнения
1Ширяев Александр АлександровичСервис пользователей и соревнованийСоздать репозиторий на GitLab;
Изучить основы web, git, nginx;
Настроить сервер nginx;
Настроить среду разработки php с поддержкой Laravel
11.03.2024
Изучить основы php и фреймворка Laravel, реализовать БД соревнований и пользователей;
Реализовать основной функционал сервиса
08.04.2024
Реализовать API и hook'и для взаимодействия сервисов07.05.2024
Тесты и документация сервиса пользователей;
Запаковка и Docker-контейнер
04.06.2024
2Купоросов Илья ДмитриевичСервис рейтинга CodewarsСоздать репозиторий на GitLab;
Изучить основы web, git, nginx;
Настроить сервер nginx;
Настроить среду разработки php с поддержкой Laravel;
Ознакомиться с API Codewars
11.03.2024
Изучить основы php и фреймворка Laravel, реализовать БД соревнований и пользователей;
Реализовать доступ через внешний API для связи с Codewars
08.04.2024
Реализовать API и hook'и для взаимодействия сервисов;
Реализовать БД информации о пользователях и зарегистрированных hook'ах
07.05.2024
Тесты и документация сервиса рейтинга Codewars;
Запаковка в Docker-контейнер
04.06.2024

Уровень мастерства пользователей

Уровни мастерства пользователей от самого низкого до самого высокого:

УровеньНазвание
18 kyu
27 kyu
36 kyu
45 kyu
54 kyu
63 kyu
72 kyu
81 kyu
91 dan
102 dan
113 dan
124 dan
135 dan
146 dan
157 dan
168 dan

Уровень сложности задач

Уровни сложности задач от самого низкого до самого высокого:

УровеньНазваниеКоличество очков
18 kyu2
27 kyu4
36 kyu8
45 kyu16
54 kyu32
63 kyu64
72 kyu128
81 kyu256

Количество получаемых пользователем очков за выполнение задачи является степенью двойки. Для первого уровня количество очков составляет 2, а не 1, поскольку, возможно, пользователи, которые уже решили задачу, указанную в соревновании, будут просто получать в два раза меньше очков за неё в соревновании, а не дисквалифицироваться из него.

Сервис пользователей и соревнований

Сервис пользователей и соревнований - это основной сервис приложения, который реализует Telegram-бот, позволяющий создавать соревнования по задачам Codewars.

Под "остальной информацией, необходимой для реализоции сервиса" понимаются всевозможные поля и отношения для составления базы данных.

Соревнования

Формат задач

Соревнование имеет формат задач в следующем формате:

Порядковый номер в соревнованииУникальный идентификатор задачи (codewars)Название задачиСложность задачи (8 - 1 kyu)
165ba420888906c1f86e1e680Collinearity8 kyu
265128732b5aff40032a3d8f0Neutralisation8 kyu

Причём обычному пользователю до начала соревнования показывается список задач в следующем формате:

Порядковый номер в соревнованииСложность задачи (8 - 1 kyu)
18 kyu
28 kyu

После начала соревнования обычному пользователю и всегда администратору список задач показывается в следующем формате:

Порядковый номер в соревнованииНазвание задачи (с ссылкой)Сложность задачи (8 - 1 kyu)
1Collinearity8 kyu
2Neutralisation8 kyu

Остальные свойства соревнований:

  • Язык программирования, на котором нужно выполнять задачи;
  • Дату и время начала и окончания соревнования;
  • Остальную информацию, необходимую для реализоции сервиса.

Рейтинг соревнования

  • По времени. Например, в соревновании 5 человек: Петя, Вася, Маша, Игорь, Никита. Первую задачу решили Петя, Вася, Никита. Тогда Петя получает дополнительно 3 очка, Вася - 2 очка, Никита - 1 очко.
  • По сложности задачи в соответствии с уровнем сложности задач.

Пользователи

Пользователи приложения делятся на две категории:

  • Обычные пользователи
  • Администраторы

Обычные пользователи

Обычные пользователи имеют:

  • Уровень;
  • Список решённых задач;
  • Остальную информацию, необходимую для реализоции сервиса.

Уровень и список решённых задач пользователя получается единственный раз при регистрации пользователя в Телеграм-боте. После этого сервис Codewars отправляет уведомления сервису пользователей о решении пользователем задач и изменении его рейтинга.

Обычный пользователь:

  • Может вступить в любое ещё не начатое соревнование (если он не решил ни одной задачи из этого соревнования);
  • Может выйти из любого ещё не начатого соревнования;
  • Может посмотреть список всех соревнований;
  • Может для выбранного соревнования посмотреть список всех задач, вступивших пользователей и задач с пользователями, которые их решили;
  • Не может войти в уже начатое соревнование;
  • Не может выйти из уже начатого соревнования;
  • После вступления в соревнование в случае решения задачи до его начала должен быть исключен из этого соревнования.

Обычный пользователь должен получать уведомления:

  • О начале, завершении или удалении соревнования, в котором он участвует, а также о создании нового соревнования и решении задачи другим пользователем в соревновании, в котором он участвует.

Администраторы

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

Администраторы могут создавать и удалять соревнования. При создании соревнования администратор должен указать его уникальное название, список уникальных идентификаторов задач, например, 65ba420888906c1f86e1e680, 65128732b5aff40032a3d8f0, дату начала и завершения соревнования, а также язык программирования для выполнения задач. Причём желательно сразу сделать так: начать соревнование можно не раньше, чем через час после момента создания, а завершить не раньше, чем через час после начала и не позже, чем через неделю после начала.

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