Създайте Spring boot приложение за управление на задачи (task-manager).
За всяка задача се съхранява следната информация:
- пореден номер на задачата (id);
- кратко описание (summary);
- описание (description);
- краен срок (deadline);
- отчети (reports).
По отношение на една задача могат да бъдат изпратени много отчети за изпълнение.
За всеки отчет да се съхранява следната информация:
- пореден номер на отчета (id);
- текстово описание на отчета (content);
- отработено време (workTime);
- дата и час на създаване (dateCreated);
- дата и час на актуализиране (dateUpdated).
Приложението трябва да изпълнява функционалности за:
Задачи:
- преглед на всички добавени задачи;
- добавяне на задача;
- преглед на дадена задача по зададен номер;
- актуализация на задача по зададени номер и актуални данни;
- изтриване на задача по зададен номер.
Отчет:
- добавяне на отчет към дадена задача;
- преглед на всички отчети към дадена задача;
- преглед на отчет към дадена задача;
- актуализация на отчет към дадена задача;
- изтриване на отчет към дадена задача.
- извеждане на отчети по дадена задача с брой отработени часове в даден интервал;
- извеждане на отчета по дадена задача с най-голям брой отработени часове;
- изчисляване на отработените часове за изпълнение на задача по подаден номер.
Приложението трябва да има слой за обработка на бизнес процесите Servise и слой за CRUD операции в хранилище на данни.
Слоевете трябва да си комуникират с DTO обекти. Данните в приложението трябва да се проверяват за валидни стойности.
- Заглавието не трябва да е празно;
- Описанието трябва да е поне 10 символа;
- Крайният срок не трябва да бъде null.
Приложението трябва да има глобално обработване на грешки с GlobalExceptionHandler. В GlobalExceptionHandler осигурете подходящ отговор към клиента при некоректно подадени данни.
CRUD операциите да се реализират с JpaRepository и Hibernate ORM. За база данни да се използва PostgreSQL.
Приложението трябва да поддържа:
Функционалности за регистрация и вписване на потребители в приложението за управление на задачи. Следвайте следните стъпки:
1.Създайте следните entity класове:
- User – id, име, потребителско име, парола, електронна поща;
- Role – id, наименование.
2.Задайте с анотации връзка между двете същности много към много (М:М). Създайте таблиците като стартирате приложението.
3.Добавете два repository слоя за управление на потребителите и ролите. Добавете методи за намиране на потребител по потребителско име (както и булев метод, който да установява дали подобно съществува) и за намиране на роля по име.
4.Създайте клас, имплементиращ интерфейса UserDetailsService. Имплементирайте метода loadUserByUsername(String username), като нека той да връща UserDetails обект, съдържащ данните на потребителя и неговите роли.
5.Създайте конфигурационен клас (с анотации @Configuration, @EnableWebSecurity и @EnableMethodSecurity), който да инжектира имплементацията на UserDetailsService и да конфигурира AuthenticationManager и PasswordEncoder. Да включва SecurityFilterChain метод, който да задава свободен достъп до ресурсите, свързани с регистрация, вписване и изход, както и изискване за удостоверяване при всички останали.
6.Приложението трябва да се защити с JWT. Направете така, че задачите да могат да се добавят, редактират и изтриват единствено от потребители с роля на администратор.
7.Добавете сервизен слой, контролер и нужните DTO за реализация на логиката по регистрация, вписване и изход.