-
Notifications
You must be signed in to change notification settings - Fork 13
Homeworks
Задачите трябва да бъдат демонстрирани пред преподавателя по време на упражнения. За отлична оценка на задачата е необходимо да съберете поне 45 точки.
ВАЖНО: Всички решения трябва да са изцяло авторски. Сходните решения на задачите се анулират!
(5% от крайната оценка)
Да се реализира със Spring 5 платформа + Spring Boot + Spring Data Mongo уеб услуга - Blogger REST API в стил Representational State Transfer (REST API). Реализираната REST услуга следва да предлага Create-Read-Update-Delete (CRUD) функционалност за блог постовете от Задача 1, както и за управление на потребителите:
- Post - с атрибути: идентификатор, дата на публикуване, заглавие, автор, текст, ключови думи - tags, URL на изображение, статус - активен по подразбиране или неактивен;
- User - с атрибути: идентификатор, име, фамилия, e-mail, парола, роля (Administrator или Blogger), URL на снимка на потребителя.
Реализирайте следните Rest endpoints (ресурси):
| Ресурс | Описание | URI темплейт | Точки |
| Users | GET данни за всички потребители, и POST данни за нов потребител (Id се попълва автоматично от API и модифицираните данни за създадения потребител се връщат като резултат на POST заявката). Достъпно само за администратори (с роля Administrator). | /api/users | 10 точки |
| User | GET, PUT, DELETE данни за потребител с дадено userId. Потребителят с роля Blogger може да вижда и модифицира само своите данни. | /api/users/{userId} | 10 точки |
| Login | POST User Credentials (e-mail и парола) и получаване на валиден Security Token за използване при последващи API заявки (например под формата на Cookie). | /api/login | 5 точки |
| Logout | POST logout заявка за приключване на активната сесия с Blogger API и инвалидиране на активния Security Token. | /api/logout | 5 точки |
| Posts | GET Posts и POST нов Post (Id се попълва автоматично от API и модифицираните данни за създадения Blog Post се връщат като резултат на POST заявката). | /api/posts | 10 точки |
| Post | GET, PUT, DELETE Post Data за Post с посочено postId. Потребителят с роля Blogger може да модифицира и изтрива само своите постове. | /api/posts/{postId} | 10 точки |
Упътване:
- Реализирайте collection level resources: /api/posts и /api/users, към които отиват collection GET и POST заявките. В отоговор на POST заявка следва REST endpoint-a да върне HTTP статус: 201 Created с header Location, който да връща individual level resource URI на новосъздадения ресурс - напр: /api/posts/16, ако новият ресурс има ID=16.
- Реализирайте individual level resource: /api/posts/{postId} и /api/users/{userId}, към които отиват read (GET), update (PUT) и delete (DELETE) заявките.
- Не забравяйте да върнете подходящ статус код при възникване на грешка към уеб клиента, в зависимост от вида на грешката (4XX или 5XX) - необходимо е за получаване на пълните точки по всяко от подусловията.
(10% от крайната оценка)
Да се реализира уеб (браузър) Java Dynamic Page Application с избрана от вас View технология (Thymeleaf, JSP). Приложението трябва да реализира следната функционалност:
- Въвеждане на нов блог пост (10 точки):
- дата на публикуване;
- заглавие;
- автор (автоматично се попълва от системата с логнатия потребител);
- текст - с поддръжка на Markdown (напр. https://github.com/atlassian/commonmark-java или https://github.com/vsch/flexmark-java);
- ключови думи - tags;
- изображение (file upload handled by your app);
- статус - активен (по подразбиране) или неактивен.
- Регистрация на нов потребител (10 точки):
- име;
- фамилия;
- e-mail;
- парола;
- роля (Administrator или Blogger);
- снимка на потребителя (file upload handled by your app);
- статус - активен (по подразбиране) или неактивен.
- Login/Logout с визуализиране на логнатия потребител отгоре в менюто. (10 точки)
- Извеждане на последните 15 блог поста, с възможност за филтриране по статус на поста, в съкратен (summary) формат (до 150 символа), сортирани (обратно - descending) по дата на публикуване (10 точки).
- Ако логнатия потребител е в роля Admin, извежда списък на всички публикации, като до всяка публикация се извеждат бутон за редактиране и бутон за изтриване на публикацията, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване), ако логнатия потребител е в роля Blogger, то списъкът от публикации, които вижда включва само неговите собствени (упътване: използвайте `@PostFilter` Spring method level security анотация). (15 точки).
- Ако логнатия потребител е в роля Admin, извежда списък на всички потребители, като до всеки потребител се извеждат бутон за редактиране и бутони за активиране/деактивиране на потребителя, които да стартират съответната функционалност (редактиране в нов изглед - view или активиране/декативиране), ако логнатия потребител е в роля Blogger, то списъкът от потребители които вижда включва само него (упътване: използвайте `@PostFilter` Spring method level security анотация). (15 точки).
- Server-side рутиране между отделните изгледи (views) описани в предишните точки с помощта на меню(10 точки).
- Domain services, които капсулират бизнес логиката по управление на потребителите и постовете. (10 точки).
- За запазване на даннните (постовете и потребителите) да се използва база от данни MongoDB (10 точки).