Exam: Build a CRUD App

Введение

Вам предстоит создать свой сайт аукциона "вслепую". Участники торгов не видят цены, которые предлагают другие. Пользователи смогут регистрироваться на сайте, выводить список товаров аукциона, делать ставки на товары, и тд. Старайтесь применять изученные конвенции, стандарты и различные best practices по максимуму.

Важно: git push должен быть вызван только один раз(в 16.00), в течение экзамена делать git push не нужно.

Pre-release: Setup

Убедитесь, что в вашем проекте установленны все необходмые вам библиотеки, создайте базу данных.

Release 0: User Registration

Первое, что нужно сделать - это регистрация пользователей. Не забудьте про шифрование паролей, называйте ваши routings по стандартам REST API, CRUD. REST API Best Practices

Добавьте ссылку на регистрацию на домашнюю страницу. Реализуйте регистрацию. email/username у пользователей должны быть уникальны. Если регистрация неуспешная - пользователь должен быть оповещен об этом. Если она прошла успешно - пользователь входит в систему и перенаправляется на домашнюю страницу. Ссылка на регистрацию заменяется именем пользователя. Примерно как на Рисунке 1:

registration mockup
Рисунок 1. Успешная и неуспешная регистрация.

Release 1: Login/Logout

Добавьте "login". Не забудьте обрабатывать ошибки: если у пользователя не получается залогиниться - ему хотелось бы знать причину. При успешном входе - вместо кнопки "login" должна появляться "logout". При нажатии на logout пользователь выходит из системы и оказывается на домашней странице приложения. login/logout animation
Рисунок 2. Login, logout.

Release 2: User Profile Page

Теперь добавьте личный кабинет(ЛК) пользователя. Чтобы перейти в личный кабинет, пользователь будет нажимать на свое имя на главной странице. На текущем этапе в ЛК оставим персональное приветствия для пользователей.

profile page animation
Рисунок 3. Login, переход в Личный Кабинет.

Release 3: List Items for Auction

Сделайте возможность добавления товара на аукцион. Используйте ЛК пользователей, чтобы добавлять свои товары. Пользователь нажимает на ссылку в ЛК -> заполняет форму (в том числе даты начала и конца торгов) -> В случае успеха - пользователя перенаправляет в его ЛК, где он может посмотреть свои товары. Это все продемонстрированно на рисунке 4:

listing an item animation
Рисунок 4. Добавление товара.

Release 4: Updating Items

В дальнейшем пользователи захотят изменить свои предложенные товары. Может быть захотят переименовать их, изменить описание и тд. Давайте добавим метод, который позволит пользователям это делать. Добавьте в ЛК ссылки edit к каждому элементу. Дальнейшие действия должны соответствовать примеру на рисунке:

editing an item
Рисунок 5. Успешное редактирование элемента.

Release 5: Deleting Items

Добавьте ссылку "delete" к каждому элементу.

deleting an item
Рисунок 6. Удаление элемента.

Release 6: Appropriate Behaviors per User and Route

Проанализируйте код, который вы уже сделали. Все ли сделано верно с точки зрения логики, распределения ролей, удобства пользователя, безопасности?

  • У кого есть доступ на добавление нового товара?
  • Кто может редактировать товары? И какие именно?
  • Кто может удалять их?
  • Кто может просматривать профиль какого-либо определенного пользователя?

Release 7: Browse items

Настало время дать пользователям возможность просматривать детально товары на нашем сайте. У нас должен быть метод, который выводит список всех активных товаров (торги уже начались, но еще не закрыты). Затем надо реализовать возможность просматривать детали по каждому товару как на рисунке ниже.

view an item's details
Рисунок 7. Просмотр деталей элемента.

Release 8: Bidding

Добавить возможность делать ставки на элементы(товары). Делать ставки нужно на странице, где отбражены детали по товару. На этой странице должна отображаться форма, в которой можно ввести свою ставку. Не забывайте обрабатывать ошибки. Ориентируйтесь на вариант, приведенный на рисунке:

bidding on an item
Рисунок 8. Ставки.

Release 9: Refine Bidding

Усовершенствуйте работу со ставками. Убедитесь, что они работают правильно. Все ли верно с точки зрения доступа?

  • Каждый ли пользователь может делать ставки, или только те, кто вошли в систему?
  • Могут ли пользователи делать ставки на собственные товары?
  • Могут ли они редактировать и удалять свои ставки?
  • Можно ли принимать ставки до начала аукциона? После завершения?

Release 10: Track Bids on the Profile Page

Добавьте возможность просматривать товары пользователя, которые сейчас находятся на аукционе, и те, которые пользователь уже выиграл. Добавьте для этого 2 раздела в ЛК:

  1. Текущие
  2. Выигранные

То есть сделайте по аналогии с рисунком 9:

profile page showing bid-in and won auctions

Рисунок 9. Страница профиля с ссылками на отображение товаров, на которые пользователь делал ставки, и на те, которые пользователь выиграл.

Conclusion

Если вы не успели выполнить задание полностью, в любом случае залейте свой проект на github. Сделать это необходимо в 16.00.