-
Notifications
You must be signed in to change notification settings - Fork 15
Homeworks
Задачите трябва да бъдат демонстрирани пред преподавателя по време на упражнения. За отлична оценка на задачата е необходимо да съберете поне 105 точки.
ВАЖНО: Всички решения трябва да са изцяло авторски. Сходните решения на задачите се анулират!
(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);
- дата и час на регистрация (генерира се автоматично);
- дата и час на последна модификация (генерира се автоматично);
- идентификатор на рецептата (MongoDB ObjectID - 24 символа);
- идентификатор на потребителя споделил рецептата (MongoDB ObjectID - 24 символа);
- име на рецептата (до 80 символа);
- кратко описание на рецептата (до 256 символа);
- време за приготвяне (в минути);
- използвани продукти (списък от продукти - JSON Array);
- снимка на резултата от рецептата (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или друг валиден URL, задължителен атрибут);
- подробно описание (до 2048 символа);
- ключови думи - tags (списък от тагове - JSON Array);
- дата и час на споделяне (генерира се автоматично);
- дата и час на последна модификация (генерира се автоматично);
- Реализирайте 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 точки)
- POST заявките към /api/users следва да създават нов потребител с валидиране на подадените данни като структура и съдържание, както е описано по-горе. (5 точки)
- Новосъздадените записи следва да бъдат запазени в MongoDB база с име cooking, в колекция users. При неуспешен запис на данните следва да се върне подходящ HTTP статус код и информация за грешката в JSON формат. (10 точки)
- Реализирайте individual level resource: /api/users/:userId/, към който отиват read (GET), update (PUT) и delete (DELETE) заявките. (15 точки),
- Заявките към /api/users/:userId следва да бъдат валидирани като структура и съдържание, както е описано по-горе. (5 точки)
- Променените/изтрити записи следва да се актуализират в MongoDB колекцията users. (10 точки)
- Реализирайте 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 точки)
- POST заявките към /api/users/:userId/recipes следва да създават нова рецепта споделена от съответния потребител с валидиране на подадените данни като структура и съдържание, както е описано по-горе. (5 точки)
- Новосъздадените записи следва да бъдат запазени в MongoDB база с име cooking, в колекция recipes. При неуспешен запис на данните следва да се върне подходящ HTTP статус код и информация за грешката в JSON формат. (10 точки)
- Реализирайте individual level resource: /api/users/:userId/recipes/:recipeId, към който отиват read (GET), update (PUT) и delete (DELETE) заявките за рецептите споделени от съответния потребител. (15 точки),
- Заявките към /api/users/:userId/recipes/:recipeId следва да бъдат валидирани като структура и съдържание, както е описано по-горе. (5 точки)
- Променените/изтрити записи следва да се актуализират в MongoDB колекцията recipes. (10 точки)
- Не забравяйте да върнете подходящ статус код при възникване на грешка към уеб клиента, в зависимост от вида на грешката (4XX или 5XX). (10 точки)
(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);
- дата и час на регистрация (генерира се автоматично);
- дата и час на последна модификация (генерира се автоматично);
- идентификатор на рецептата (MongoDB ObjectID - 24 символа);
- идентификатор на потребителя споделил рецептата (MongoDB ObjectID - 24 символа);
- име на рецептата (до 80 символа);
- кратко описание на рецептата (до 256 символа);
- време за приготвяне (в минути);
- използвани продукти (списък от продукти - JSON Array);
- снимка на резултата от рецептата (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или друг валиден URL, задължителен атрибут);
- подробно описание (до 2048 символа);
- ключови думи - tags (списък от тагове - JSON Array);
- дата и час на споделяне (генерира се автоматично);
- дата и час на последна модификация (генерира се автоматично);
- Позволява добавяне на нов потребител (в тази версия без секюрити рестрикции). (10 точки)
- Позволява избор на активен потребител (login). (5 точки)
- Позволява публикуване на нова рецепта от активния потребител. (10 точки)
- Извеждане на последните 15 публикувани рецепти, с възможност за филтриране по ключови думи (tags) и автор (потребител споделил рецептата), със снимка на резултата, в съкратен (summary) формат (до 150 символа), сортирани (обратно - descending) по дата на публикуване. (10 точки)
- Извежда списък на всички рецепти, като до всяка рецепта се извеждат бутон за редактиране и бутон за изтриване на рецептата, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване). За редактирането можете да използвате повторно формата за публикуване реализирана в предишна точка. (10 точки).
- Извежда списък на всички потребители, като до всеки потребител се извеждат бутон за редактиране и бутон за изтриване на пoтребителя, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване) (10 точки).
- Меню позволяващо избор на всека от функционалностите (изгледите, views) реализирани в задачата. (5 точки).