Цель: реализация многослойной архитектуры.
Требуется реализовать механизм автоматизации создания отчётов о проделанной командой работе за определённый период разработки (далее - спринт). В команде один из сотрудников - тимлид, он составляет итоговый отчёт о проделанной работе команды в конце каждого спринта.
- Сотрудник может добавлять новые задачи, вносить изменения в существующие, выполнять их.
- Сотрудник должен писать отчёт о проделанной работе за каждый спринт. Чтобы это сделать он использует список всех изменений, произведённых с момента создания предыдущего отчёта. В течение спринта сотрудник делает отчёт, прикрепляя к нему выполненные за этот период задачи.
- Тимлид в конце спринта пишет отчёт за всю команду, просматривая список выполненных задач и отчётов.
- Сотрудник. У сотрудника может быть руководитель и могут быть подчиненные.
- Задача
- Отчёт
В реализованной системе должна быть возможность добавлять новых сотрудников, изменять руководителя сотрудника и получать иерархию всех сотрудников.
Иерархия сотрудников представляется следующим образом: тимлид - сотрудник, руководитель - корень дерева, которому подчиняются другие сотрудники, которые могут иметь или не иметь подчинённых.
Задача может находиться в одном из трёх состояний:
- Open - задача создана, но к её выполнению ещё не приступили.
- Active - задача находится в процессе выполнения.
- Resolved - задача выполнена.
Сотрудник должен иметь возможность добавить комментарий к задаче. Все изменения (состояние/назначенный сотрудник/комментарий) должны фиксироваться во времени. При этом в системе должна быть возможность просмотреть, когда было сделано определённое изменение.
Система управления задачами должна поддерживать следующий функционал:
- поиск задач по ID
- поиск задач по времени создания/последнего изменения
- поиск задач, закреплённых за определённым пользователем (сотрудником команды)
- поиск задач, в которые пользователь вносил изменения
- создание задачи, изменение её состояния, добавления к ней комментария, изменение назначенного за ней сотрудника
- получение списка задач, которые назначены подчинённым определённого сотрудника
Необходимо реализовать возможность написания отчётов за весь спринт. В системе на каждый спринт создается драфт отчёта (то есть черновик, начальный проект отчёта за спринт, который в дальнейшем будет корректироваться), который заполняет каждый сотрудник. Для написания отчёта пользователю системы должна предоставляться возможность получить список всех своих задач за спринт, а также список отчётов своих подчиненных за спринт.
После окончания написания отчёта за спринт сотрудник должен сохранить его в системе. После этого отчёт считается завершённым, доступ на его редактирование закрывается. Тимлид должен иметь возможность видеть статус отчёта. Если отчёт завершённый, то он агрегирует в командный отчёт за спринт.
Слой представления должен быть реализовать в ввиде консольного клиента, все взаимодействие происходит через консоль. Требуется реализовать такой набор функционала:
- Сотрудники
- GetAll (с пагинацией)
- GetById
- Update
- Delete
- Create
- Авторизация - выставление, что работа происходит от имени определенного сотрудника
- Задачи
- GetAll
- поиск задач по ID
- поиск задач по времени создания/последнего изменения
- поиск задач, закреплённых за определённым пользователем (сотрудником команды)
- поиск задач, в которые пользователь вносил изменения
- создание задачи, изменение её состояния, добавления к ней комментария, изменение назначенного за ней сотрудника
- получение списка задач, которые назначены подчинённым определённого сотрудника
- Добавление задачи, обновление описания задачи
- Изменение человека, который заасайнен
- Недельный отчет (викли)
- Создать викли отчет
- Получить список задач за эту неделю
- Получить список дейли отчетов подчиненных (для тех, кто написал. Отдельно список тех, кто еще не написал)
- Добавление задачи в отчет
- Обновление описания и состояния отчета
В рамках лабораторной предполагается реализация многослойной архитектуры. В качестве UI слоя требуется реализация интерфейса для пользователя (консольного или иного на усмотрение пользователя). В качестве слоя данных требуется добавить хранение данных (рекомендуется использовать ORM).