Пользователь может выбрать локацию из списка (Шушары, Кудрово и тд).
Пользователь может выбрать размер склада (M, S, XS).
Отображение стоимости аренды:
Стоимость аренды рассчитывается на основе выбранной локации и размера склада и отображается на странице на основе данных из таблицы min_weekly_price_view.
Ввод контактной информации:
Пользователь вводит свое имя, электронную почту и номер телефона.
Отправка заявки на бронирование:
Пользователь нажимает кнопку "Отправить заявку", чтобы отправить введенные данные на сервер.
Техническое взаимодействие фронта и бэка:
Отправка данных формы на сервер:
При нажатии кнопки "Отправить заявку" данные формы (имя, почта, телефон, выбранная локация и размер) отправляются на сервер для сохранения новой заявки в таблице requests.
Проверка наличия свободных ячеек:
Сервер получает запрос на проверку наличия свободных ячеек в выбранной локации и размера.
Запрос выполняется к таблице cells, где хранятся данные о всех ячейках.
Обработка ответа сервера:
Если сервер находит подходящую свободную ячейку, обновляется состояние страницы и отображается сообщение о возможности бронирования
Пользователь может перейти к бронированию немедленно, либо отправить запрос на ручное бронирование менеджером
Если подходящих ячеек нет, пользователю показывается сообщение об отправке заявки на ожидание.
В дальнейшем заменим на выбор лита ожидания. Пока автоматизация в этом случае не настроена и на почту ничего не летит
Триггеры на бэке:
Таблица requests содержит триггеры, которые автоматически обновляют статус заявки в зависимости от действий пользователя.
Таблица cells содержит триггеры, которые автоматически обновляют статус ячеек в зависимости от их текущего состояния (доступна, зарезервирована, арендована).
Описание таблиц на бэке:
Таблица requests:
Поле created_at: Время создания заявки.
Поле processed: Флаг, указывающий, обработана ли заявка.
Поле status: Текущий статус заявки (lead, reserved, waiting_list, fell_off).
Поле phone: Телефон клиента.
Поле client_name: Имя клиента.
Поле size: Размер ячейки, на которую подана заявка (связано с таблицей sizes).
Поле email: Электронная почта клиента.
Поле notes: Заметки по заявке.
Поле manager: Email менеджера, который обрабатывает заявку (связано с таблицей users_by_roles).
Поле reserved_cell: Идентификатор зарезервированной ячейки, если заявка переведена в статус reserved (связано с таблицей cells).
Поле user_id: Идентификатор пользователя, обрабатывающего заявку (связано с таблицей auth.users).
Поле request_id: Идентификатор заявки.
Поле reserv_expired: Дата истечения резерва ячейки.
Поле waitingTimeD: Дата, до которой клиент готов ждать свободной ячейки (для статуса waiting_list).
Поле location: Идентификатор локации, к которой относится заявка (связано с таблицей loc_geo).
Поле franchise: Идентификатор франшизы, к которой относится заявка.
Таблица cells:
Поле created_at: Время создания записи о ячейке.
Поле size: Размер ячейки, выбирается из списка возможных размеров.
Поле price_tier: Уровень цены ячейки, связывается с таблицей area_prices, определяет стоимость аренды.
Поле status: Статус ячейки: not_working, available, reserved, rented.
Поле current_client: Email текущего клиента, связанного с ячейкой.
Поле cell_id: Уникальный идентификатор ячейки.
Поле container: Номер контейнера, к которому относится ячейка.
Поле created_by: ID пользователя, создавшего запись о ячейке.
Поле end_date: Дата окончания аренды ячейки.
Поле email: Email менеджера, создавшего запись о ячейке.
Поле adress: Адрес локации, к которой относится ячейка.
Поле reserved_expired: Дата окончания резерва ячейки.
Поле is_active: Показатель активности ячейки.
Поле location_id: ID локации, к которой относится ячейка.
Взаимодействие фронта и бэка
Запрос с фронта на бэк для сохранения данных:
При отправке формы данные (имя, почта, телефон, выбранная локация и размер) отправляются в таблицу requests.
Запрос на проверку наличия ячеек:
Запрос к таблице cells для получения доступных ячеек на основе выбранной локации и размера.
Обновление статуса на фронте и бэке:
На фронте обновляется состояние страницы, отображаются соответствующие сообщения.
На бэке триггеры в таблицах requests и cells автоматически изменяют статус заявок и ячеек.
Самостоятельное бронирование по кнопке «Забронировать сейчас»:
Действия при нажатии на кнопку
Описание:
При нажатии на кнопку "Забронировать сейчас" происходит несколько последовательных действий, как на фронте, так и на бэке. Весь процесс можно разбить на несколько шагов.
Шаги:
Генерация токена приглашения:
Генерируется уникальный токен приглашения с помощью функции functions.generateInviteToken().
Состояние компонента обновляется, чтобы сохранить сгенерированный токен.
Переход на страницу gotoLK:
Выполняется навигация на страницу gotoLK с передачей параметров:
cellID: Идентификатор ячейки.
clientemail: Электронная почта клиента.
token: Сгенерированный токен приглашения.
timeReserved: Время резерва в днях (в данном случае, 3 дня).
Создание инвайта для резерва::
В таблицу Reserve_tokens добавляется новая запись с данными:
invite_token: сгенерированный токен
client_email: email клиента
used: false (токен еще не использован)
expires_at: дата и время истечения срока действия (через 3 часа)
cell_id: идентификатор ячейки
Обновление заявки:
В таблице RequestsTable обновляется запись заявки с данными:
notes: Примечание о самостоятельной брони.
processed: Флаг, указывающий, что заявка обработана.
status: Статус заявки, установленный на "reserved".
reserv_expired: Дата истечения резерва, сгенерированная функцией functions.createReserveTime(3).