План выполнения
| № | ФИО | Название сервиса | Краткое описание | Срок выполнения |
|---|---|---|---|---|
| 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 |
Уровень мастерства пользователей
Уровни мастерства пользователей от самого низкого до самого высокого:
| Уровень | Название |
|---|---|
| 1 | 8 kyu |
| 2 | 7 kyu |
| 3 | 6 kyu |
| 4 | 5 kyu |
| 5 | 4 kyu |
| 6 | 3 kyu |
| 7 | 2 kyu |
| 8 | 1 kyu |
| 9 | 1 dan |
| 10 | 2 dan |
| 11 | 3 dan |
| 12 | 4 dan |
| 13 | 5 dan |
| 14 | 6 dan |
| 15 | 7 dan |
| 16 | 8 dan |
Уровень сложности задач
Уровни сложности задач от самого низкого до самого высокого:
| Уровень | Название | Количество очков |
|---|---|---|
| 1 | 8 kyu | 2 |
| 2 | 7 kyu | 4 |
| 3 | 6 kyu | 8 |
| 4 | 5 kyu | 16 |
| 5 | 4 kyu | 32 |
| 6 | 3 kyu | 64 |
| 7 | 2 kyu | 128 |
| 8 | 1 kyu | 256 |
Количество получаемых пользователем очков за выполнение задачи является степенью двойки. Для первого уровня количество очков составляет 2, а не 1, поскольку, возможно, пользователи, которые уже решили задачу, указанную в соревновании, будут просто получать в два раза меньше очков за неё в соревновании, а не дисквалифицироваться из него.
Сервис пользователей и соревнований
Сервис пользователей и соревнований - это основной сервис приложения, который реализует Telegram-бот, позволяющий создавать соревнования по задачам Codewars.
Под "остальной информацией, необходимой для реализоции сервиса" понимаются всевозможные поля и отношения для составления базы данных.
Соревнования
Формат задач
Соревнование имеет формат задач в следующем формате:
| Порядковый номер в соревновании | Уникальный идентификатор задачи (codewars) | Название задачи | Сложность задачи (8 - 1 kyu) |
|---|---|---|---|
| 1 | 65ba420888906c1f86e1e680 | Collinearity | 8 kyu |
| 2 | 65128732b5aff40032a3d8f0 | Neutralisation | 8 kyu |
Причём обычному пользователю до начала соревнования показывается список задач в следующем формате:
| Порядковый номер в соревновании | Сложность задачи (8 - 1 kyu) |
|---|---|
| 1 | 8 kyu |
| 2 | 8 kyu |
После начала соревнования обычному пользователю и всегда администратору список задач показывается в следующем формате:
| Порядковый номер в соревновании | Название задачи (с ссылкой) | Сложность задачи (8 - 1 kyu) |
|---|---|---|
| 1 | Collinearity | 8 kyu |
| 2 | Neutralisation | 8 kyu |
Остальные свойства соревнований:
- Язык программирования, на котором нужно выполнять задачи;
- Дату и время начала и окончания соревнования;
- Остальную информацию, необходимую для реализоции сервиса.
Рейтинг соревнования
- По времени. Например, в соревновании 5 человек: Петя, Вася, Маша, Игорь, Никита. Первую задачу решили Петя, Вася, Никита. Тогда Петя получает дополнительно 3 очка, Вася - 2 очка, Никита - 1 очко.
- По сложности задачи в соответствии с уровнем сложности задач.
Пользователи
Пользователи приложения делятся на две категории:
- Обычные пользователи
- Администраторы
Обычные пользователи
Обычные пользователи имеют:
- Уровень;
- Список решённых задач;
- Остальную информацию, необходимую для реализоции сервиса.
Уровень и список решённых задач пользователя получается единственный раз при регистрации пользователя в Телеграм-боте. После этого сервис Codewars отправляет уведомления сервису пользователей о решении пользователем задач и изменении его рейтинга.
Обычный пользователь:
- Может вступить в любое ещё не начатое соревнование (если он не решил ни одной задачи из этого соревнования);
- Может выйти из любого ещё не начатого соревнования;
- Может посмотреть список всех соревнований;
- Может для выбранного соревнования посмотреть список всех задач, вступивших пользователей и задач с пользователями, которые их решили;
- Не может войти в уже начатое соревнование;
- Не может выйти из уже начатого соревнования;
- После вступления в соревнование в случае решения задачи до его начала должен быть исключен из этого соревнования.
Обычный пользователь должен получать уведомления:
- О начале, завершении или удалении соревнования, в котором он участвует, а также о создании нового соревнования и решении задачи другим пользователем в соревновании, в котором он участвует.
Администраторы
Администраторы - это не расширение обычных пользователей, они могут создавать соревнования, но не могут участвовать в них. Однако на них не накладываются некоторые ограничения, которые накладываются на обычных пользователей.
Администраторы могут создавать и удалять соревнования. При создании соревнования
администратор должен указать его уникальное название, список уникальных идентификаторов
задач, например, 65ba420888906c1f86e1e680, 65128732b5aff40032a3d8f0,
дату начала и завершения соревнования, а также язык программирования для выполнения задач.
Причём желательно сразу сделать так: начать соревнование можно не раньше, чем через час
после момента создания, а завершить не раньше, чем через час после начала и не позже,
чем через неделю после начала.
Администраторы могут без каких-либо ограничений просматривать всю информацию о всех соревнованиях.