-
Notifications
You must be signed in to change notification settings - Fork 16
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 точки)
Краен срок за демонстриране на решението (по време на упражнения): 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);
- дата и час на регистрация (генерира се автоматично);
- дата и час на последна модификация (генерира се автоматично);
- идентификатор на рецептата (MongoDB ObjectID - 24 символа);
- идентификатор на потребителя споделил рецептата (MongoDB ObjectID - 24 символа);
- име на рецептата (до 80 символа);
- кратко описание на рецептата (до 256 символа);
- време за приготвяне (в минути);
- използвани продукти (списък от продукти - JSON Array);
- снимка на резултата от рецептата (може да бъде Data URL във формат data: [<mediatype></mediatype>][;base64],<data></data> или друг валиден URL, задължителен атрибут);
- подробно описание (до 2048 символа);
- ключови думи - tags (списък от тагове - JSON Array);
- дата и час на споделяне (генерира се автоматично);
- дата и час на последна модификация (генерира се автоматично);
- Извеждане на последните 15 блог поста, с възможност за филтриране по статус на поста, в съкратен (summary) формат (до 150 символа), сортирани (обратно - descending) по дата на публикуване (10 точки).
- Извежда списък на всички публикации, като до всяка публикация се извеждат бутон за редактиране и бутон за изтриване на публикацията, който да активира съответната функционалност (редактиране в нов изглед - view или изтриване) (10 точки).
- Рутиране между отделните изгледи (views) описани в предишните точки (10 точки).