Skip to content

Homeworks

Trayan Iliev edited this page May 22, 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

Краен срок за демонстриране на решението (по време на упражнения): 4 май 2017 (5% от крайната оценка)

Да се реализира клиентско (браузър) приложение с ReactJS и react-router v4, без презареждане на страницата (Single Page Application - SPA с рутиране) със следната функционалност:

За всеки потребител (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. Извеждане на последните 15 блог поста, с възможност за филтриране по статус на поста, в съкратен (summary) формат (до 150 символа), сортирани (обратно - descending) по дата на публикуване (10 точки).
  2. Извежда списък на всички публикации, като до всяка публикация се извеждат бутон за редактиране и бутон за изтриване на публикацията, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване) (10 точки).
  3. Рутиране между отделните изгледи (views) описани в предишните точки (10 точки).
Максимален брой точки: 40.

Clone this wiki locally