/Task-tracker

Тестовое задание, трекер задач.

Primary LanguageGo

Task-tracker

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