Направете онлайн магазин за определен вид (избран от вас) продукти.
Като минимум, системата трябва да поддържа следните неща:
- Добавяне/промяна/изтриване на продукти. Всеки продукт съдържа поне заглавие, описание, категория, цена и определени функционални характеристики. Тези характеристики зависят от вида продукти. Например, ако продавате обувки това може да са "цвят", "размер", "мъжки/дамски/унисекс", "с или без връзки" и подобни.
- Търсене на продукти по заглавие, категория и конкретни характеристики.
- Възможност за задаване на наличността на всеки продукт.
- Система за потребители с логин/регистрация и поне 2 ранга - администратор и обикновен потребител:
- Администраторите имат възможност да управляват всички данни в приложението:
- Могат да променят данните за продуктите.
- Виждат история на поръчките.
- Управляват потребители, включително да правят други потребители администратори.
- Обикновените потребители могат да се регистрират свободно, да купуват продукти и да ги коментират.
- Администраторите имат възможност да управляват всички данни в приложението:
- Възможност правене на поръчки след регистрация.
- Купуването става чрез добавяне на един или повече продукта към "кошницата" на потребителя. В кошницата се виждат добавените продукти и цените им, както и общата стойност на поръчката.
- Потребителя трябва да потвърди, че иска да закупи всички продукти от кошницата, за да направи поръчката.
- След като поръчката бъде направена - тя се вижда от администраторите, които могат да я маркират като завършена.
- Всеки потребител трябва да има история на поръчките си.
- Всеки трябва да може да коментира продукти. Администраторите могат да изтриват коментари.
- Напишете сами системата за регистрация/вход. Без gem-ове като devise или warden. Разбира се, може да използвате библиотеки за сесии и cookie-та (например тези, които са пакетирани в Sinatra). Паролите не трябва да се съхраняват в чист вид. Трябва да са поне хеширани - прочетете за добрите практики по темата.
- Валидирайте максимално много неща и показвайте смислени съобщения за грешки.
- Използвайте релационна база от данни. Например SQLite3. За целта ще ви трябва sqlite3 gem-а, или пък може да ползвате направо някакъв ORM, например ActiveRecord - вижте ръководството ни за уеб проекти
- Постарайте се да покриете максимална част от кода си с автоматизирани тестове и да направите добро разделение между "логика" и "интерфейс". Това индиректно означава, че не трябва да има много код директно в Sinatra DSL-а. Не се притеснявайте да правите допълнителни класове. Задачите на един подобен клас може да е дори изпълнение на някакво действие (например, правене на поръчка).