Функциональные требования (FR)
UC-001: Регистрация и аутентификация пользователя
| Раздел | Описание |
|---|---|
| ID | UC-001 |
| Название | Регистрация и вход в систему |
| Акторы | Незарегистрированный пользователь |
| Предусловия | Пользователь открыл веб-приложение и хочет воспользоваться функционалом веб-приложения |
| Основной поток | Регистрация: 1. Пользователь нажимает кнопку «Войти / Зарегистрироваться». 2. Система отображает форму с выбором: «Вход» или «Регистрация». 3. Пользователь выбирает «Регистрация». 4. Система показывает форму регистрации с полями: Имя, Email, Пароль, Подтверждение пароля. 5. Пользователь заполняет обязательные поля и нажимает «Зарегистрироваться». 6. Система проверяет уникальность email и корректность формата данных. 7. Система создаёт учётную запись и перенаправляет пользователя на страницу входа. Вход: 8. Пользователь выбирает «Вход». 9. Вводит email и пароль, нажимает «Войти». 10. Система проверяет учётные данные и создаёт сессию. |
| Постусловия | Пользователь вошёл в систему |
| Альтернативный поток 1 | Email уже занят (точка входа: шаг 6) 6.1. Система сообщает об ошибке и предлагает войти или использовать другой email. |
| Альтернативный поток 2 | Неверный пароль (точка входа: шаг 10) 10.1. Система сообщает о неверной паре email/пароль. |
| Исключительный поток 1 | Ошибка сервера (точка входа: шаг 7) 7.1. Отображается сообщение «Не удалось завершить регистрацию. Попробуйте позже». |
| Исключительный поток 2 | Ошибка сервера (точка входа: шаг 10) 10.1. Отображается сообщение «Не удалось войти в систему. Попробуйте позже». |
UC-002: Поиск ресторанов с фильтрацией
| Раздел | Описание |
|---|---|
| ID | UC-002 |
| Название | Поиск ресторанов с применением фильтров |
| Акторы | Авторизованный пользователь |
| Предусловия | Пользователь находится на странице каталога ресторанов |
| Основной поток | 1. Пользователь открывает панель фильтров и указывает параметры: тип кухни, средний чек, наличие детского меню, расположение (район, метро). 2. Пользователь нажимает кнопку «Найти». 3. Система применяет фильтры к базе ресторанов-партнёров. 4. Система отображает список ресторанов, соответствующих критериям. 5. Пользователь может отсортировать результаты по рейтингу. |
| Постусловия | Пользователь видит отфильтрованный список ресторанов |
| Альтернативный поток 1 | Нет результатов поиска с выбранными фильтрами (точка входа: шаг 4) 4.1. Система отображает сообщение «Ничего не найдено» и предлагает изменить фильтры. |
| Бизнес-правила | Для MVP запускаем для города Москва. Выбор города: автоматически Москва |
UC-003: Просмотр детальной информации о ресторане и выбор столика
| Раздел | Описание |
|---|---|
| ID | UC-003 |
| Название | Просмотр детальной информации и выбор столика |
| Акторы | Авторизованный пользователь |
| Предусловия | Пользователь перешёл на страницу ресторана |
| Основной поток | 1. Система отображает детальную страницу ресторана: описание, фотографии, контакты, часы работы. 2. Система показывает интерактивный план зала с отображением столиков. 3. При наведении на столик отображаются его характеристики: количество мест, расположение (у окна, на веранде и т.п.). 4. Пользователь выбирает столик и нажимает на него. 5. Система отображает календарь и временные слоты для выбранного столика (с учётом доступности, полученной от внешней системы ресторана). |
| Постусловия | Пользователь выбрал столик |
UC-004: Онлайн-бронирование столика
| Раздел | Описание |
|---|---|
| ID | UC-004 |
| Название | Онлайн-бронирование столика |
| Акторы | Авторизованный пользователь |
| Предусловия | Пользователь аутентифицирован, выбрал ресторан и столик |
| Основной поток | 1. Пользователь выбирает дату и время и нажимает кнопку «Забронировать». 2. Система отображает экран подтверждения брони с деталями: ресторан, столик, дата, время, количество персон. 3. Система отправляет синхронный запрос на создание брони во внешнюю систему ресторана (API). 4. Внешняя система резервирует столик и возвращает подтверждение с уникальным номером брони. 5. Система сохраняет бронь в своей базе данных и отображает пользователю сообщение об успешном бронировании. 6. Система инициирует отправку email-подтверждения. |
| Постусловия | Бронь создана в обеих системах, пользователь уведомлён |
| Альтернативный поток 1 | Выбранный слот занят (точка входа: шаг 4) 4.1. Система показывает сообщение «Столик занят. Выберите другое время». |
| Исключительный поток 1 | Внешняя система не отвечает или возвращает ошибку (точка входа: шаг 3) 3.1. Бронь не создаётся, пользователь видит сообщение: «Не удалось забронировать. Попробуйте позже или выберите другой ресторан». |
| Бизнес-правила | Пользователь может иметь не более одной активной брони на одно и то же время в одном ресторане |
UC-005: Просмотр бронирований
| Раздел | Описание |
|---|---|
| ID | UC-005 |
| Название | Просмотр бронирований |
| Акторы | Авторизованный пользователь |
| Предусловия | Пользователь аутентифицирован |
| Основной поток | 1. Пользователь переходит в раздел «Мои бронирования». 2. Система отображает две вкладки: «Предстоящие» и «История». 3. На вкладке «Предстоящие» отображаются будущие брони с кнопкой «Отменить». 4. На вкладке «История» — завершённые и отменённые брони. 5. Пользователь может кликнуть на любую бронь для просмотра деталей. |
| Постусловия | Пользователь ознакомился со своими бронями |
| Альтернативный поток 1 | Пустой список (точка входа: шаг 2) 2.1. Система показывает сообщение «У вас пока нет бронирований» и предлагает перейти к каталогу. |
UC-006: Отмена брони пользователем
| Раздел | Описание |
|---|---|
| ID | UC-006 |
| Название | Отмена брони пользователем |
| Акторы | Авторизованный пользователь |
| Предусловия | Пользователь находится в списке предстоящих броней и выбрал бронь для отмены |
| Основной поток | 1. Пользователь нажимает кнопку «Отменить» рядом с бронью. 2. Система запрашивает подтверждение. 3. Пользователь подтверждает отмену. 4. Система отправляет запрос на отмену во внешнюю систему ресторана. 5. Внешняя система подтверждает отмену. 6. Система обновляет статус брони на «Отменена пользователем». 7. Система отображает сообщение об успешной отмене и обновляет список. 8. Система отправляет email-уведомление об отмене. |
| Постусловия | Бронь отменена, столик свободен для других бронирований |
| Альтернативный поток 1 | Пользователь отказался от отмены (точка входа: шаг 3) 3.1. Диалог закрывается, бронь сохраняется. |
| Исключительный поток 1 | Ошибка внешней системы (точка входа: шаг 4) 4.1. Пользователю показывается сообщение об ошибке и предлагается повторить попытку. |
UC-007: Регистрация ресторана
| Раздел | Описание |
|---|---|
| ID | UC-007 |
| Название | Регистрация ресторана |
| Акторы | Администратор ресторана, администратор платформы |
| Предусловия | Ресторан ещё не зарегистрирован |
| Основной поток | 1. Администратор ресторана заполняет заявку на сайте: название, ИНН, контактные данные, email, пароль. 2. Проверка корректности данных. 3. Система отправляет заявку на модерацию. 4. Администратор системы проверяет данные и активирует учётную запись. 5. Ресторан получает уведомление об активации (email) и может войти в личный кабинет. |
| Постусловия | Ресторан зарегистрирован и может настраивать свой профиль |
| Альтернативный поток 1 | Отказ в регистрации (точка входа: шаг 3) 3.1. Администратор отклоняет заявку с указанием причины. 3.2. Ресторан получает уведомление. |
| Исключительный поток 1 | Ресторан с таким ИНН уже зарегистрирован (точка входа: шаг 2) 2.1. Система проверяет уникальность ИНН. 2.2. Найден ресторан с таким же ИНН. 2.3. Система отклоняет заявку и отображает сообщение: «Ресторан с таким ИНН уже зарегистрирован. Пожалуйста, проверьте данные или восстановите доступ к существующей учётной записи». |
UC-008: Управление профилем ресторана
| Раздел | Описание |
|---|---|
| ID | UC-008 |
| Название | Управление профилем ресторана |
| Акторы | Администратор ресторана, авторизованный в системе |
| Предусловия | Ресторан зарегистрирован, администратор ресторана вошёл в личный кабинет |
| Основной поток | 1. Представитель переходит в раздел «Профиль». 2. Редактирует описание, загружает фотографии, указывает тип кухни, средний чек, часы работы, контакты. 3. Сохраняет изменения. 4. Система обновляет данные на витрине для пользователей. |
| Постусловия | Профиль обновлён |
UC-009: Управление схемой зала и столиками
| Раздел | Описание |
|---|---|
| ID | UC-009 |
| Название | Управление схемой зала и столиками |
| Акторы | Администратор ресторана, авторизованный в системе |
| Предусловия | Ресторан зарегистрирован |
| Основной поток | 1. Администратор использует визуальный редактор для расстановки столиков. 2. Для каждого столика указывает: номер, количество мест, расположение (у окна, на веранде и т.п.), подгружает фотографии столика. 3. Сохраняет схему. 4. Система проверяет корректность данных. 5. Система отображает актуальный план зала пользователям. |
| Постусловия | План зала сохранён и доступен для просмотра и бронирования |
| Исключительный поток 1 | Столик с таким номером уже существует (дублирование) (точка входа: шаг 4) 4.1. Система проверяет уникальность номеров столиков. 4.2. Обнаружен конфликт: два столика имеют одинаковый номер. 4.3. Система отображает сообщение: «Обнаружены ошибки в схеме: проверьте номера столиков». 4.4. Пользователя возвращают к редактору схемы столиков. |
UC-010: Просмотр бронирований ресторана
| Раздел | Описание |
|---|---|
| ID | UC-010 |
| Название | Просмотр бронирований ресторана |
| Акторы | Администратор ресторана, авторизованный в системе |
| Предусловия | Ресторан зарегистрирован |
| Основной поток | 1. Администратор переходит в раздел «Бронирования». 2. Система отображает список броней с возможностью фильтрации по дате, статусу, столику. 3. Для каждой брони видны: дата, время, столик, имя гостя, контактный телефон, количество персон. 4. Представитель может кликнуть на бронь для просмотра деталей. |
| Постусловия | Ресторан владеет информацией о всех бронях |
| Исключительный поток 1 | Ошибка загрузки списка броней (точка входа: шаг 2) 2.1. Система выполняет запрос к базе данных для получения списка броней. 2.2. Происходит сбой (БД недоступна, таймаут). 2.3. Система отображает сообщение: «Не удалось загрузить список броней. Пожалуйста, обновите страницу или попробуйте позже». |