Phone: (+359) 2 80-99-862; Fax: (+359) 2 80-99-888



Дата06.01.2017
Размер159.16 Kb.
#12049



33, Alexander Malinov Blvd., Sofia, 1729, Bulgaria

Phone: (+359) 2 80-99-862; Fax: (+359) 2 80-99-888









Video Store – Kурсов проект по „Уеб дизайн с HTML 5, CSS 3 и JavaScript – част II" – вариант # 2

Да се проектира и реализира уеб клиентско приложение за разглеждане на видеотеки. В него потребителите могат да разглеждат всички видеотеки, да се регистрират, наемат филми и съотвено връщат наети филми. Всеки регистриран потребител може да наема свободен филм или да връща вече нает от него.


Описание на системата "Video Store"


Посредством централен сървър потребителите в системата "Video Store" могат да се разглеждат всички видеотеки и филмите в тях, да се регистрират и след регистрация да наемат/връщат филми в дадена видеотека.

Работа на системата "Video Store"


Работата със системата "Video Store" най-общо обхваща следните стъпки:

  1. Посетители на системата могат свободна да разглеждат всички видеотеки или на страници

  2. Посетителите на системата могат свободно да се регистрират в нея.

  3. След влизане в системата потребителите могат да наемат филм от видеотека.

  4. След влизане в системата потребителите могат да връщат вече нает филм.

Архитектура на системата "Video Store"


Системата "Video Store" за разглеждане на видеотеки и филмите в тях работи в режим клиент-сървър. Клиентите (уеб браузъри) комуни­кират със системата сървъра (не директно) чрез изпращане на REST заявки с JSON-сериализирани данни.

Комуникация със сървъра


Цялата комуникация между клиента и сървъра се извършва в REST стил чрез HTTP GET и HTTP POST команди, изпратени асинхронно като AJAX заявки от клиента към сървъра, на които сървърът отговаря с JSON-сериализиран резултат. При успех сървърът връща HTTP статус код 200, а при грешка връща трицифрен HTTP статус код за грешка. Форматът на всяка REST заявка е различен и е описан по-долу, като URL адресът на REST услугата е условно означен по следния начин:

http://service-url/

Услугите от страна на сървъра се разработват от преподавателския екип и не са задача на курсистите. Услугите се предоставят във вид на сорс код + скрипт за създаване на базата данни и могат да се ползват локално (от хост машината на разработчика) или от Интернет. Публичната Интернет инстанция на сървърната REST услуга за проекта е достъпна от следния URL в облака на AppHarbor:

http://js-video-stores.apphb.com/api/stores

Всеки участник сам преценява дали да ползва публичния Интернет сървър или да инсталира собствено локално копие (ако има технически познания и желание да го направи).

Имайте предвид, че тъй като заявките и резултатите от извикване на REST услугите са стандартни JSON-сериализирани обекти, няма гаранция за наредбата на ключовете в асоциативните масиви, които се връщат или изпращат (тя може да е произволна).


Регистрация


Регистрацията в системата е отворена публично за всички посетители с уеб браузър. При регистрация потребителят въвежда потребителско име и автентикационен код. Автентикаци­онният код се изчислява от уеб клиентското приложение чрез хеширане на потребителското име и паролата (долепени един до друг) по формулата SHA1(username + password) и се изпраща като шестнайсе­тично число. Формат на заявката към услугата:

URL

http://service-url/register-user

Method: POST

Body

{"username":"DonchoMinkov",

"authCode":" e3adcdcff8fe40290d7bbd3c19a1e414425e5aaa "}



При успех услугата връща HTTP статус код 200.

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{"Message":"There is already such user"}

Текстът в полето Message е само информативен и не е предназначен за машинна обработка. Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

There is already such user

404

Username contains invalid characters

404

Username must start with a letter

404

Username contains invalid characters

404

Username must be atleast 4 characters

404

Username must be atmost 30 characters

404

Password should be crypted

500

User registration failed (general error)

Извличане на всички видеотеки


Извличането на всички видеотеки е позволено за всички потребители. Формат на заявката към услугата:

URL

http://service-url/all

Method: GET

При успех услугата връща HTTP статус код 200 и резултат в следния формат:

Body

[{ "id" : 5, "title" : "Store Title #0" },

{ "id" : 6, "title" : "Store Title #1" },

{ "id" : 7, "title" : "Store Title #2" },

{ "id" : 8, "title" : "Store Title #3" }]



При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:

Body

{"Message":"Invalid Request"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

Invalid Request

500

Listing nearby restaurants failed (general error)

Извличане на видеотеки по страници


Извличането на всички видеотеки по страници е позволено за всички потребители. Услугата приема незадължителни аргументи page и count, чрез които се определя видеотеките от коя страница да се върнат като резултат. Ако аргументите не са налице, приемат стойности page=0 и count=10. Формат на заявката към услугата:

URL

http://service-url/page?page=1&count=5

Method: GET

При успех услугата връща HTTP статус код 200 и резултат в следния формат:

Body

[{ "id" : 23, "title" : "Store Title #18" },

{ "id" : 24, "title" : "Store Title #19" },

{ "id" : 7, "title" : "Store Title #2" },

{ "id" : 8, "title" : "Store Title #3" },

{ "id" : 9, "title" : "Store Title #4" }]


При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:

Body

{"Message":"Invalid Request"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

Minimal page is 0

404

The items on a page must be atleast 5

404

No so many pages

500

Paging failed (general error)

Извличане на подробна информация за видеотека


Извличането на подробна информация за видеотека е позволено за всички потребители. Като параметър на заявката трябва да се подаде индентификационния номер на съответната видеотека. Формат на заявката към услугата:

URL

http://service-url/info/6

Method: GET

При успех услугата връща HTTP статус код 200 и резултат в следния формат:

Body

{ "id" : 6,

"title" : "Store Title #1",

"movies" : [{ "id" : 2104,

"title" : "The Best of the Blues Brothers",

"publishDate" : "1993-01-01T00:00:00",

"description" : "{long description...}" },

{ "id" : 2176,

"title" : "American Flyers",

"publishDate" : "1985-01-01T00:00:00",

"description" : "{long description...}" },

{ "id" : 2178,

"title" : "And Then There Were None",

"publishDate" : "1945-01-01T00:00:00",

"description" : "{long description...}" }]



}

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:

Body

{"Message":"Invalid Request"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

No such store

500

Listing nearby restaurants failed (general error)

Извличане на броя страници


Извличането на броя страници е позволено за всички потребители. Услугата приема като аргумент sizeброя видеотеки на страница. Формат на заявката към услугата:

URL

http://service-url/pages-count?size=7

Method: GET

При успех услугата връща HTTP статус код 200 и резултат в следния формат:

Body

{"pages":3}

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:

Body

{"Message":"Invalid Request"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

The items on a page must be atleast 5

500

Listing nearby restaurants failed (general error)

Извличане на подробна информация за филм


Всеки потребител може да поиска по-детайлна информация за даден филм. При заявката трябва да се подаде като параметър, индетификационния номер на филма. Формат на заявката към услугата:

URL

http://service-url/movie-info/2146

Method: GET

При успех услугата връща HTTP статус код 200 и следния резултат:

Body

{ "id" : 2146,

"title" : "Against All Odds",

"description" : "Ex-football player Terry Brogan (Jeff Bridges) has been hired to track down Jessie Wyler (Rachel Ward), the mistress of sleazy Los Angeles nightclub owner Jake Wise (James Woods). It's not long, however, before Terry has traveled to Mexico and fallen in love with the elusive Jessie. Naturally, Jake sends his henchman to retrieve the couple, and Terry finds himself tangled in a web of murder and corruption.",

"publishDate" : "1984-01-01T00:00:00"

"actors" : [{ "id" : 63,

"firstName" : "Jeff",

"lastName" : "Bridges"}],

"stores" : [{ "id" : 5,

"title" : "Store Title #0"],

"categories" : [{ "id" : 30,

"name" : "crime thrillers"},

{ "id" : 31,

"name" : "romantic movies"},

{ "id" : 32,

"name" : "thrillers"},

{ "id" : 98,

"name" : "steamy thrillers" }]

}


Резултата съдържа подробна информация за съответния филм – id, description, списък от категории, заглавие и списък от видеотеки, в които го има наличен.

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{ "Меssage":"No such movie"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

No such movie

500

Cannot execute the Request(general error)

Извличане на всички категории


Всеки потребител може да поиска всички филмови категории. Формат на заявката към услугата:

URL

http://service-url/categories

Method: GET

При успех услугата връща HTTP статус код 200 и следния резултат:

Body

[{ "id" : 1, "name" : "Action" },

{ "id" : 2, "name" : "Adventure" },

{ "id" : 3, "name" : "Comedy" },

{ "id" : 4, "name" : "Drama" },

{ "id" : 5, "name" : "Romance" },

{ "id" : 6, "name" : "Sci-Fi" },

{ "id" : 7, "name" : "Fantasy" },

{ "id" : 8, "name" : "Cartoon" },

{ "id" : 9, "name" : "Thriller" },

{ "id" : 10, "name" : "Family" },

{ "id" : 11, "name" : "Documentary" },

{ "id" : 12, "name" : "Horror" },

{ "id" : 13, "name" : "Western" },

{ "id" : 14, "name" : "Mystery" },

{...}]


Резултата съдържа списък от всички категории, с тяхното id и наименование.

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

500

Cannot execute the Request(general error)

Извличане на подробна информация за категория


Всеки потребител може да поиска по-детайлна информация за дадена категория. При заявката трябва да се подаде като параметър, индетификационния номер на категорията. Формат на заявката към услугата:

URL

http://service-url/category-info/5

Method: GET

При успех услугата връща HTTP статус код 200 и следния резултат:

Body

{ "id" : 32,

"name" : "thrillers",

"movies" : [{ "id" : 2093,

"title" : "B Monkey",

"publishDate" : "1999-01-01T00:00:00",

"description" : "{long description...}" },

{ "id" : 2096,

"title" : "The Red Violin",

"publishDate" : "1998-01-01T00:00:00",

"description" : "{long description...}" }]

}


Резултата съдържа подробна информация за съответната категория – id, наименование, както и списък с всички филми от тази категория.

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{ "Меssage":"No such category"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

No such category

500

Cannot execute the Request(general error)

Извличане на всички актьори и актриси


Всеки потребител може да поиска списък от всички актьори и актриси. Формат на заявката към услугата:

URL

http://service-url/actors

Method: GET

При успех услугата връща HTTP статус код 200 и следния резултат:

Body

[{ "id" : 5,

"firstName" : "Daniel",

"lastName" : "Baldwin" },

{ "id" : 6,

"firstName" : "Asia",

"lastName" : "Argento" },

{ "id" : 7,

"firstName" : "Helena",

"lastName" : "Bonham" },

{ "id" : 8,

"firstName" : "Joan",

"lastName" : "Allen" },

{ "id" : 9,

"firstName" : "Jean-Luc",

"lastName" : "Bideau" },

{ "id" : 10,

"firstName" : "Kaye",

"lastName" : "Ballard" },

{ "id" : 11,

"firstName" : "Christian",

"lastName" : "Bale" },

{...}]


Резултата съдържа списък от актьори, като за всеки актьор се съдържа неговото id, собствено и фамилно имена.

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{ "Меssage":" "Cannot execute the Request(general error)"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

500

Cannot execute the Request(general error)

Извличане на подробна информация за актьор


Всеки потребител може да поиска по-детайлна информация за даден актьор. При заявката трябва да се подаде като параметър, индетификационния номер на актьора. Формат на заявката към услугата:

URL

http://service-url/actor-info/11

Method: GET

При успех услугата връща HTTP статус код 200 и следния резултат:

Body

{ "id" : 11,

"firstName" : "Christian",

"lastName" : "Bale",

"movies" : [{ "id" : 2098,

"title" : "Velvet Goldmine",

"publishDate" : "1998-01-01T00:00:00",

"description" : "A decade after British glam-rocker Brian Slade (Jonathan Rhys-Meyers) fakes his assassination on stage and disappears from view, tabloid journalist Arthur Stuart (Christian Bale) is dispatched to deconstruct the legend of the bisexual pop star. In the process of interviewing Slade's cohorts and colleagues, Stuart gradually strips away the veneer of makeup and glitz, revealing the empty core of both the man and his music." }]

}


Резултата съдържа подробна информация за съответния актьор – id, собствено и фамилно име, както и списък с всички филми, в които е участвал.

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{ "Меssage":"No such actor"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

No such actor

500

Cannot execute the Request(general error)

Наемане на филм от видеотека


Само регистрираните потребители могат да наемат филми. Потребителят трябва да изпрати свойте потребителско име и автентикационен код, както и индетификационния номер на филма, който иска да наеме. Формат на заявката към услугата:

URL

http://service-url/rent-movie

Method: POST

Body

{ "movieId" : 2092,

"user" : { "username" : "DonchoMinkov",

"authCode" : "e3adcdcff8fe40290d7bbd3c19a1e414425e5aaa"}

}


При успех услугата връща HTTP статус код 200:

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{ "Меssage":"Movie cannot be rented"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

Movie cannot be rented

500

Cannot execute the Request(general error)

Връщане на нает филм от видеотека


Само регистрираните потребители могат да връщат филмите, които са наели. Потребителят трябва да изпрати свойте потребителско име и автентикационен код, както и индетификационния номер на филма, който иска да върне. Формат на заявката към услугата:

URL

http://service-url/return-movie

Method: POST

Body

{ "movieId" : 2092,

"user" : { "username" : "DonchoMinkov",

"authCode" : "e3adcdcff8fe40290d7bbd3c19a1e414425e5aaa"}

}


При успех услугата връща HTTP статус код 200:

При грешка услугата връща трицифрен HTTP статус код за грешка и резултат в следния формат:



Body

{ "Меssage":"Movie cannot be returned"}

Кодовете на грешките в полето Message са следните:

HTTP Code

Description

404

Movie cannot be returned

500

Cannot execute the Request(general error)

Обработка на грешки


Приложение трябва да обработва евентуално възникващите грешки по подходящ начин, например да има специален екран (прозорец) за тях или да ги визуализира в специално поле или по друг начин. Грешки могат да възникнат по всяко време и по най-различни причини: прекъснат достъп до Интернет, изгубена връзка със сървъра, грешка на сървъра, изпратена невалидна команда и т.н.

Допълнителни изисквания


  • Потребителският интерфейс на системата може да е на български или на английски език (по ваш избор).

  • Приложението трябва да е базирано на HTML5 и JavaScript. По желание може да се използва jQuery или друг JavaScript framework.

  • Трябва да се поддържат следните уеб браузъри: Chrome 16+, Firefox 9+, IE9+, Safari 5.1+.

  • Потребителският интерфейс може да е базиран на KendoUI, jQueryUI или на друга библиотека за UI.

  • Нямате право да използвате сървърна логика, която се различава от предоставената имплементация на услугите към проекта. Нямате право да добавяте допълнителни сървърни услуги.

Бонуси


Допълнителни точки ще се дават за:

  • Реализирана добра ползваемост – удобен, лесен за употреба и интуитивен потребителски интерфейс.

  • Коректност и правилна работа при необичайни ситуации: например при въвеждане на невалидни данни (празни полета, прекалено дълги полета, невалиден формат).

  • Качествен програмен код (HTML, CSS, JavaScript), структуриране на програмната логика в класове, функции и файлове, спазвайки утвърдените в индустрията концепции за изграждане на качествен софтуер.

  • Добър и удобен външен вид (уеб дизайн) – можете да ползвате ваш собствен дизайн или да адаптирате дизайн със свободен лиценз.

  • Качествен програмен код (HTML, CSS, JavaScript), структуриране на програмната логика в класове, функции и файлове, спазвайки утвърдените в индустрията концепции за изграждане на качествен софтуер.

  • Реализация на потребителски настройки, с които да се конфигурира приложението.

  • Реализирането на функционалност, която не се изисква в условията на проектите не носи непременно допълнителни точки. По-важно е да се реализира коректно изискваната функционалност.

Предаване на проектите


Проектите се предават като цялостно реализирано уеб клиентското приложение. Курсовият проект изисква да бъдат предадени следните активи (пакетирани в ZIP или RAR архив):

  • HTML код на приложението

  • JavaScript код на приложението (ако използвате външни JavaScript библиотеки, може да включите техния сорс код или да ги ползвате от Интернет)

  • CSS код на приложението

  • Други незадължителни активи (Photoshop файл с уеб дизайна например, инструкции за употреба, документация и т.н.)

Проектите се предават онлайн от формата за изпращане на домашни и проекти към курса: http://telerikacademy.com/Courses/Courses/Details/10.

Краен срок за предаване на проектите: 10 февруари 2013 г.


Защита на проектите


Защитата на проектите ще се извърши в края на курса. На защитата всеки студент ще трябва да представи проекта си, да покаже каква част от изискванията са реализирани и работят и да разкаже как е реализирал функционалността, след което ще му бъде дадена задача – да реализира допълнителна функция към проекта, на място в изпитната зала.

Силно препоръчително е всеки да си носи лаптоп с подготвена работна среда, на който да работи по време на защитата или да използва отдалечена сесия до своя работен настолен компютър, тъй като конфигурирането на работна среда за разработка с PhoneGap и емулатори на мобилните устройства в изпитните зали може да създаде проблеми и да ви загуби излишно време.









Deliver more than expected

Page of

www.telerik.com






Сподели с приятели:




©obuch.info 2022
отнасят до администрацията

    Начална страница