Задача 1

Разработете Spring Boot приложение за управление на задачи и свързани с тях отчети (ще бъде надграждано в следващите упражнения). Приложението трябва да предоставя REST API за създаване, извличане, актуализиране и изтриване на задачи и отчети. Всяка задача може да има множество отчети, свързани с нея.

За всяка задача се съхранява следната информация:

  • пореден номер на задачата (id);
  • заглавие (summary);
  • описание (description);
  • краен срок (deadline);
  • списък с отчети, свързани с тази задача (reports).

Всеки отчет да съхранява:

  • пореден номер на отчет (id);
  • съдържание на отчета (content);
  • отработено време в часове (workTime);
  • дата на създаване (dateCreated);
  • дата на актуализация (dateUpdated);
  • задачата, към която принадлежи отчетът (task).

Предвидете функционалности:

За задача:

  • преглед на всички добавени задачи;
  • добавяне на задача;
  • преглед на дадена задача по зададен номер;
  • актуализация на задача по зададени номер и актуални данни;
  • изтриване на задача по зададен номер.

За отчет:

  • добавяне на отчет към дадена задача;
  • преглед на всички отчети към дадена задача;
  • преглед на отчет към дадена задача;
  • актуализация на отчет към дадена задача;
  • изтриване на отчет към дадена задача.
  • извеждане на отчети по дадена задача с брой отработени часове в даден интервал;
  • извеждане на отчета по дадена задача с най-голям брой отработени часове;
  • изчисляване на отработените часове за изпълнение на задача по подаден номер.

Използвайте DTO обекти (TaskRequestDto, TaskResponseDto, ReportRequestDto, ReportResponseDto) за трансфер на данни между клиентите и сървъра. RequestDto класовете да се използват за получаване на входни данни от клиента, а ResponseDto за връщане на отговори с всички съответни полета, включително свързаните задачи и отчети.