Тестовое задание Middle. Сервис по планированию задач
Список фичей:
▪️ Пользователь может добавлять, удалять, закрывать и заново открывать задачи
▪️ Названия задач должны быть уникальными для всех пользователей (удаленные не учитываются).
▪️ Пользователь может получить список всех задач любого другого пользователя, кроме удаленных.
▪️ Пользователь может закрывать, удалять и заново открывать только свои задачи
▪️ Задача проходит следующие состояния: CREATED <--> CLOSED -> DELETED. При этом задача в статусе CREATED не может сразу перейти в DELETED. Задача же в DELETED больше не может переходить ни в какое состояние.
В рамках задания DELETED можно трактовать как фактическое удаление элемента, а не выставление какого-либо статуса.
Веб-сервер принимает сообщения по придуманному нами протоколу - Simple Web Protocol.
Запросы и ответы состоят из одной строки.
Формат запроса: "USER COMMAND ARG"
Формат ответа: "RESULT ARG"
Описание формата:
1. USER — имя пользователя, который осуществляет действие.
2. COMMAND — команда. Варианты команд:
▪️ CREATE_TASK MyTask — создать задачу с названием MyTask
▪️ CLOSE_TASK MyTask — закрыть задачу MyTask
▪️ DELETE_TASK MyTask — удалить задачу MyTask
▪️ REOPEN_TASK MyTask — заново открыть задачу MyTask
▪️ LIST_TASK USER — Получить список задач пользователя (в статусе CREATED и CLOSED)
▪️ __DELETE_ALL — Удалить информацию о всех пользователях и их задачах. Используется в тестах, чтобы «чистить» данные между их выполнением. Формат ответа для этой команды не имеет значения, так как он нигде не валидируется.
3. ARG — аргумент запроса или ответа. Может отсутствовать. Например, в запросе на создание задачи VASYA CREATE_TASK CleanRoom — это CleanRoom. А в ответе TASKS [MyTask1, MyTask2] — [MyTask1, MyTask2].
4. RESULT — ответ сервера о совершении действия. Варианты ответов.
▪️ CREATED — задача успешно создана
▪️ DELETED — задача успешно удалена
▪️ CLOSED — задача успешно закрыта
▪️ REOPENED — задача успешно открыта заново
▪️ TASKS [MyTask1, MyTask2] — список задач пользователя. Если задач нет, список пустой ([]). Задачи перечислены в порядке их создания.
▪️ WRONG_FORMAT — Неверный формат запроса
▪️ ACCESS_DENIED — Нет прав на совершение операции
▪️ ERROR — Любая другая ошибка
5. Все команды, а также имена пользователей регистрозависимые. В названии задач и имен пользователей не может быть пробелов.
6. Запросы валидируются в следующем порядке: формат запроса, право на совершение операции, все остальные проверки. Если первая проверка не прошла, остальные не выполняются.
Примеры запросов и ответов:
1.VASYA CREATE_TASK CleanRoom
CREATED
2.PETYA DELETE_TASK CleanRoom
ACCESS_DENIED
3.PETYA CREATE_TASK Task1
CREATED
4.PETYA CREATE_TASK Task2
CREATED
5.VASYA LIST_TASK PETYA
TASKS [Task1, Task2]
6.VASYA CREATE_TASK CleanRoom
ERROR
В данном примере состояние сервиса сохраняется между запросами, поэтому PETYA DELETE_TASK CleanRoom возвращает ACCESS_DENIED.
Дополнительные баллы
Учитывается общее оформление кода, архитектурное разделение компонентов, а также наличие Unit-тестов на отдельные части проекта.