👣 Тестовое задание 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-тестов на отдельные части проекта.



@golang_interview