Skip to content

Homeworks

Trayan Iliev edited this page Jun 2, 2019 · 83 revisions

Table of Contents

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

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

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

Задача 1: REST API for Cooking Recipes

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

Краен срок за демонстриране на решението (по време на упражнения): 8 май 2019

Да се реализира с Node.js и Express.js уеб услуга в стил Representational State Transfer (REST API) за потребители (Users) споделящи готварски рецепти (Cooking Recipes). Реализираната REST API уеб услуга следва да предлага Create-Read-Update-Delete (CRUD) функционалност за потребителите и техните готварски рецепти.

За всеки потребител (User) се съхранява следната информация (с валидация на данните):

  • идентификатор на записа (MongoDB ObjectID - 24 символа);
  • име на потребителя;
  • login име (Username - до 15 символа - word characters);
  • парола (поне 8 символа, поне една цифра и знак различен от буква и цифра);
  • пол;
  • потребителска роля (user или admin);
  • снимка на потребителя (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или валиден нормален URL, ако липсва се замества с URL на аватара по подразбиране в зависимост от пола);
  • кратко представяне на потребителя (до 512 символа);
  • статус на валидност на акаунта - (active, suspended или deactivated);
  • дата и час на регистрация (генерира се автоматично);
  • дата и час на последна модификация (генерира се автоматично);
За всяка рецепта (Recipe) се съхранява следната информация (с валидация на данните):
  • идентификатор на рецептата (MongoDB ObjectID - 24 символа);
  • идентификатор на потребителя споделил рецептата (MongoDB ObjectID - 24 символа);
  • име на рецептата (до 80 символа);
  • кратко описание на рецептата (до 256 символа);
  • време за приготвяне (в минути);
  • използвани продукти (списък от продукти - JSON Array);
  • снимка на резултата от рецептата (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или друг валиден URL, задължителен атрибут);
  • подробно описание (до 2048 символа);
  • ключови думи - tags (списък от тагове - JSON Array);
  • дата и час на споделяне (генерира се автоматично);
  • дата и час на последна модификация (генерира се автоматично);
Реализацията трябва да бъде съобразена с препоръките и изискванията на REST архитектурния стил и HTTP стандарта на W3C.
  1. Реализирайте collection level resource: /api/users, към който отиват collection GET (GET all users) и POST заявките. В отоговор на POST заявка следва REST endpoint-a да върне HTTP статус: 201 Created с header Location, който да връща individual level resource URI на новосъздадения ресурс - напр: /api/users/5cb7510d69168b597c9206d8, ако новият потребител има ID=5cb7510d69168b597c9206d8. (10 точки)
  2. POST заявките към /api/users следва да създават нов потребител с валидиране на подадените данни като структура и съдържание, както е описано по-горе. (5 точки)
  3. Новосъздадените записи следва да бъдат запазени в MongoDB база с име cooking, в колекция users. При неуспешен запис на данните следва да се върне подходящ HTTP статус код и информация за грешката в JSON формат. (10 точки)
  4. Реализирайте individual level resource: /api/users/:userId/, към който отиват read (GET), update (PUT) и delete (DELETE) заявките. (15 точки),
  5. Заявките към /api/users/:userId следва да бъдат валидирани като структура и съдържание, както е описано по-горе. (5 точки)
  6. Променените/изтрити записи следва да се актуализират в MongoDB колекцията users. (10 точки)
  7. Реализирайте collection level resource: /api/users/:userId/recipes, към който отиват collection GET (GET all user recipes) и POST заявките. В отоговор на POST заявка следва REST endpoint-a да върне HTTP статус: 201 Created с header Location, който да връща individual level resource URI на новосъздадения ресурс - напр: /api/users/5cb7510d69168b597c9206d8/recipes/7ba7510d69168b597c9206a5, ако новата рецепта има ID=7ba7510d69168b597c9206a5. (10 точки)
  8. POST заявките към /api/users/:userId/recipes следва да създават нова рецепта споделена от съответния потребител с валидиране на подадените данни като структура и съдържание, както е описано по-горе. (5 точки)
  9. Новосъздадените записи следва да бъдат запазени в MongoDB база с име cooking, в колекция recipes. При неуспешен запис на данните следва да се върне подходящ HTTP статус код и информация за грешката в JSON формат. (10 точки)
  10. Реализирайте individual level resource: /api/users/:userId/recipes/:recipeId, към който отиват read (GET), update (PUT) и delete (DELETE) заявките за рецептите споделени от съответния потребител. (15 точки),
  11. Заявките към /api/users/:userId/recipes/:recipeId следва да бъдат валидирани като структура и съдържание, както е описано по-горе. (5 точки)
  12. Променените/изтрити записи следва да се актуализират в MongoDB колекцията recipes. (10 точки)
  13. Не забравяйте да върнете подходящ статус код при възникване на грешка към уеб клиента, в зависимост от вида на грешката (4XX или 5XX). (10 точки)
Максимален брой точки: 120.

Задача 2: Cooking Recipes Frontend

(5% от крайната оценка) Краен срок за демонстриране на решението (по време на упражнения): 5 юни 2019, след финалния тест

Да се реализира клиентско (браузър) приложение с ReactJS, без презареждане на страницата (Single Page Application - SPA), използващо REST API for Cooking Recipes от задача 1, със следната функционалност:

За всеки потребител (User) се съхранява следната информация (с валидация на данните):

  • идентификатор на записа (MongoDB ObjectID - 24 символа);
  • име на потребителя;
  • login име (Username - до 15 символа - word characters);
  • парола (поне 8 символа, поне една цифра и знак различен от буква и цифра);
  • пол;
  • потребителска роля (user или admin);
  • снимка на потребителя (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или валиден нормален URL, ако липсва се замества с URL на аватара по подразбиране в зависимост от пола);
  • кратко представяне на потребителя (до 512 символа);
  • статус на валидност на акаунта - (active, suspended или deactivated);
  • дата и час на регистрация (генерира се автоматично);
  • дата и час на последна модификация (генерира се автоматично);
За всяка рецепта (Recipe) се съхранява следната информация (с валидация на данните):
  • идентификатор на рецептата (MongoDB ObjectID - 24 символа);
  • идентификатор на потребителя споделил рецептата (MongoDB ObjectID - 24 символа);
  • име на рецептата (до 80 символа);
  • кратко описание на рецептата (до 256 символа);
  • време за приготвяне (в минути);
  • използвани продукти (списък от продукти - JSON Array);
  • снимка на резултата от рецептата (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или друг валиден URL, задължителен атрибут);
  • подробно описание (до 2048 символа);
  • ключови думи - tags (списък от тагове - JSON Array);
  • дата и час на споделяне (генерира се автоматично);
  • дата и час на последна модификация (генерира се автоматично);
  1. Позволява добавяне на нов потребител (в тази версия без секюрити рестрикции). (10 точки)
  2. Позволява избор на активен потребител (login). (5 точки)
  3. Позволява публикуване на нова рецепта от активния потребител. (10 точки)
  4. Извеждане на последните 15 публикувани рецепти, с възможност за филтриране по ключови думи (tags) и автор (потребител споделил рецептата), със снимка на резултата, в съкратен (summary) формат (до 150 символа), сортирани (обратно - descending) по дата на публикуване. (10 точки)
  5. Извежда списък на всички рецепти, като до всяка рецепта се извеждат бутон за редактиране и бутон за изтриване на рецептата, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване). За редактирането можете да използвате повторно формата за публикуване реализирана в предишна точка. (10 точки).
  6. Извежда списък на всички потребители, като до всеки потребител се извеждат бутон за редактиране и бутон за изтриване на пoтребителя, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване) (10 точки).
  7. Меню позволяващо избор на всека от функционалностите (изгледите, views) реализирани в задачата. (5 точки).
Максимален брой точки: 60.

Clone this wiki locally