Skip to content

Homeworks

Trayan Iliev edited this page Dec 20, 2019 · 34 revisions

Table of Contents

Homework Problems (Задачи за домашно)

Задачите трябва да бъдат демонстрирани пред преподавателя по време на упражнения. За отлична оценка на задачата е необходимо да съберете поне 45 точки.

ВАЖНО: Всички решения трябва да са изцяло авторски. Сходните решения на задачите се анулират!

Задача 1: Blogger REST API

(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 архитектурния стил и HTTP стандарта на W3C, както и препоръките за реализация на REST ресурси, разгледани по-време на лекции.

Реализирайте следните 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 точки

Упътване:

  1. Реализирайте 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.
  2. Реализирайте individual level resource: /api/posts/{postId} и /api/users/{userId}, към които отиват read (GET), update (PUT) и delete (DELETE) заявките.
  3. Не забравяйте да върнете подходящ статус код при възникване на грешка към уеб клиента, в зависимост от вида на грешката (4XX или 5XX) - необходимо е за получаване на пълните точки по всяко от подусловията.
Максимален брой точки: 50.

Задача 2: Simple Blogging

(10% от крайната оценка)

Да се реализира уеб (браузър) Java Dynamic Page Application с избрана от вас View технология (Thymeleaf, JSP). Приложението трябва да реализира следната функционалност:

  1. Въвеждане на нов блог пост (10 точки):
    • дата на публикуване;
    • заглавие;
    • автор (автоматично се попълва от системата с логнатия потребител);
    • текст - с поддръжка на Markdown (напр. https://github.com/atlassian/commonmark-java или https://github.com/vsch/flexmark-java);
    • ключови думи - tags;
    • изображение (file upload handled by your app);
    • статус - активен (по подразбиране) или неактивен.
  2. Регистрация на нов потребител (10 точки):
    • име;
    • фамилия;
    • e-mail;
    • парола;
    • роля (Administrator или Blogger);
    • снимка на потребителя (file upload handled by your app);
    • статус - активен (по подразбиране) или неактивен.
  3. Login/Logout с визуализиране на логнатия потребител отгоре в менюто. (10 точки)
  4. Извеждане на последните 15 блог поста, с възможност за филтриране по статус на поста, в съкратен (summary) формат (до 150 символа), сортирани (обратно - descending) по дата на публикуване (10 точки).
  5. Ако логнатия потребител е в роля Admin, извежда списък на всички публикации, като до всяка публикация се извеждат бутон за редактиране и бутон за изтриване на публикацията, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване), ако логнатия потребител е в роля Blogger, то списъкът от публикации, които вижда включва само неговите собствени (упътване: използвайте `@PostFilter` Spring method level security анотация). (15 точки).
  6. Ако логнатия потребител е в роля Admin, извежда списък на всички потребители, като до всеки потребител се извеждат бутон за редактиране и бутони за активиране/деактивиране на потребителя, които да стартират съответната функционалност (редактиране в нов изглед - view или активиране/декативиране), ако логнатия потребител е в роля Blogger, то списъкът от потребители които вижда включва само него (упътване: използвайте `@PostFilter` Spring method level security анотация). (15 точки).
  7. Server-side рутиране между отделните изгледи (views) описани в предишните точки с помощта на меню(10 точки).
  8. Domain services, които капсулират бизнес логиката по управление на потребителите и постовете. (10 точки).
  9. За запазване на даннните (постовете и потребителите) да се използва база от данни MongoDB (10 точки).
Максимален брой точки: 100.

Clone this wiki locally