Сервис для доставки цветов - представляет собой api приложение, позволяющее клиенту выбрать нужные цветы и другие товары (независимо от того, был ли клиент зарегистрирован в приложении) и заказать доставку по нужному адресу.
Оформление заказа:
-
Клиент заходит на страницу поиска:
- создается пустая корзина
-
(опционально) Клиент логинится или регистрируется:
- если идет регистрация - создается запись в User
-
Клиент выбирает товары:
- статус корзины = InProgress
- в CartProduct помещаются записи, определяющие продукты в корзине
-
(опционально) Клиент может удалить несколько товаров:
- в CartProduct происходит удаление строк
-
Клиент бронирует заказ. Ему предлагается залогиниться (зарегистрироваться)
- Клиент соглашается:
- если нет записи в user (клиент не зарегистрирован), то создается запись в User после регистрации; клиент логинится
- обновляется UserId в Cart
- Клиент остается не авторизованным:
- в User создается запись о пользователе без аутентификации
- клиент заполняет на форме заказа: адрес, email, телефон
-
Клиент бронирует заказ. Проверяется, валидна ли корзина:
- если валидна, то создается заказ, удаляется корзина
- если не валидна, переходим к выбору товаров (п.4)
-
Клиент оплачивает заказ:
- обновление статуса в Order = Paid
-
Получатель ожидает доставки:
- клиент может посмотреть свой заказ в личном кабинете
-
Получателю доставили заказ, флоу завершился:
- заказ переходит в статус Completed
Наглядная блок-схема, описывающая работу приложения:
Описание таблиц:
-
product - таблица товаров (цветы и пр.)
- id - идентификатор товара
- name - наименование товара
- price - стоимость товара
- quantity - количество товара; если кол-во = 0, то товара временно нет в наличии
- discount - скидка на товар, если имеется
-
user - таблица клиентов
- id - идентификатор клиента
- fio - ФИО клиента
- email - эл. почта клиента
- phone - телефон клиента
- address - адрес клиента
- is_active - флажок, обозначающий, активен ли клиент (может пригодиться для рассылок)
-
order - таблица заказов
- id - идентификатор заказа
- user_id - идентификатор заказчика
- order_status_id - статус заказа
- cost - общая стоимость заказа
- created - дата и время создания заказа
- email - эл. почта пользователя, на который может прийти чек об оплате заказа
- address - адрес для доставки заказа
- phone - номер телефона, для связи с курьером; может быть номером получателя заказа
-
order_status - таблица статусов заказа
- id - идентификатор статуса
- name - наименование статуса
- description - описание статуса
-
order_product - связующая таблица между заказами и продуктами; содержит товары, добавленные в заказ
- id - идентификатор связи между заказами и продуктами
- order_id - идентификатор заказа
- product_id - идентификатов товара в заказе
- count - количество конкретного товара, добавленного в заказ
-
cart - таблица корзины
- id - идентификатор корзины
- user_id - идентификатор пользователя, зашедшего в приложение
- order_id - идентификатор заказа
- cart_status_id - идентификатор статуса корзины
- created - дата и время захода в приложение пользователем
-
cart_product - связующая таблица между корзинами и продуктами; содержит товары, добавленные в корзину
- id - идентификатор связи между корзинами и продуктами
- cart_id - идентификатор корзины
- product_id - идентификатор продукта
- count - количество конкретного товара, добавленного в корзину
-
cart_status - таблица статусов корзины
- id - идентификатор статуса
- name - наименование статуса
- description - описание статуса

