Ниже описывается концептуальная модель пользовательского интерфейса приложения: набор страниц и их содержание, схема навигация между страницами, сценарии использования (юзкейсы). Приводится схема и описание базы данных.
- PostgreSQL
- Файлы создания и заполнения БД лежат в src/main/resources/sql/
- Характеристики автомобилей хранятся в jsonb-словарях - это позволяет без потери в производительности использовать как стандартные характеристики, так и добавлять при желании новые для данного автомобиля, не внося изменений в структуру БД.
- Статусы заказа: "В работе", "Отменён", "Ожидание оплаты", "Оплачен", "Завершён", "На тест-драйве".
- Мини-дэшборд с некоторой статистикой по базе данных, например, количество автомобилей в наличии, в тест-драйве, число активных заказов и т. п.
- Меню, содержащее ссылки на основные страницы сайта: главная, каталог автомобилей, список моделей, список производителей, список клиентов, список заказов. Меню доступно на всех страницах сайта.
- По умолчанию выводится список всех автомобилей с пагинацией по страницам. Поле поиска по модели, кнопка "Найти". Поля фильтров, позволяющие задать характеристики автомобиля, кнопка применения фильтров. Кнопки сортировки автомобилей по цене, году выпуска, пробегу.
- В списке в карточке каждого автомобиля приведена краткая информация о нём (производитель, модель, год выпуска, пробег, наличие, цена). По клику на модель можно перейти на страницу модели. По клику на производителя можно перейти на страницу производителя. Кнопка "Удалить", удаляющая автомобиль из БД (каскадно удаляются все нерабочие заказы). Кнопка "Редактировать", переводящая на страницу редактирования автомобиля. Кнопка "Посмотреть", переводяшая на страницу автомобиля.
- Кнопка "Добавить автомобиль", переход на страницу добавления автомобиля.
Форма добавления автомобиля с различными полями.
- Производитель. Выпадающий список и кнопка перехода на страницу "Производители", если производителя нет в БД, для добавления.
- Модель. Выпадающий список моделей заданного производителя. Кнопка перехода на страницу "Добавление модели", если модели нет в БД.
- Основные характеристики. Поля: VIN, год выпуска, цена.
- Технические характеристики. Поля: объем и мощность двигателя, расход топлива, количество дверей, мест, вместимость багажника, тип коробки передач, круиз-контроль, требуемое топливо. Кнопка "Добавить характеристику", добавляющая новую характеристику.
- Потребительские характеристики. Поля: цвет, обивка салона. Кнопка "Добавить характеристику", добавляющая новую характеристику.
- Изменяемые характеристики. Поля: пробег, год последнего ТО. Кнопка "Добавить характеристику", добавляющая новую характеристику.
- Внутренние устройства. Кнопка "Добавить устройство", добавляющая новое поле.
Кнопка "Добавить автомобиль".
- Информация об автомобиле (характеристики, кликабельные ссылки на клиентов, бравших тест-драйв). По клику на производителя переход на страницу производителя, по клику на модель - на страницу модели.
- Кнопка "Редактировать", переводящая на страницу редактирования автомобиля.
- Кнопка "Удалить", удаляющая автомобиль из БД (каскадно удаляются все нерабочие заказы).
Форма редактирования автомобиля с различными полями. Аналогично добавлению. Также можно отредактировать поле "Наличие" (В наличиии или нет).
- По умолчанию выводится список всех моделей. Поле поиска по модели, кнопка "Найти". Поле фильтра по производителю, кнопка применения фильтра.
- В списке в карточке каждой модели приведена краткая информация о ней (производитель, название модели). По клику на производителя можно перейти на страницу производителя. Кнопка "Удалить", удаляющая модель из БД (при наличии автомобилей запрещается). Кнопка "Редактировать", переводящая на страницу редактирования модели. Кнопка "Посмотреть", переводяшая на страницу модели.
- Кнопка "Добавить модель", переход на страницу добавления модели.
Форма добавления модели. Поля:
- Производитель. Выпадающий список и кнопка перехода на страницу "Производители", если производителя нет в БД, для добавления.
- Название модели.
- Информация о модели. По клику на производителя переход на страницу производителя. Список автомобилей данной модели.
- Кнопка "Редактировать", переводящая на страницу редактирования модели.
- Кнопка "Удалить", удаляющая модель из БД (при наличии автомобилей запрещается).
Форма редактирования модели (название, производитель). Аналогично добавлению.
- По умолчанию выводится список всех производителей. Поле поиска, кнопка "Найти".
- Кнопка "Удалить" (при наличии моделей запрещается). Поле редактирования имени производителя. Кнопка "Посмотреть", переводяшая на страницу производителя.
- Поле и кнопка "Добавить производителя".
- Название производителя. Список моделей данного производителя.
- Поле редактирования имени производителя.
- Кнопка "Удалить", удаляющая производителя из БД (при наличии моделей запрещается).
- По умолчанию выводится список всех клиентов с пагинацией по страницам. Поле поиска по ФИО, кнопка "Найти". Поля фильтров, позволяющие задать атрибуты заказов, кнопка применения фильтров.
- В списке в карточке каждого клиента приведена краткая информация о нём (ФИО, телефон, email). Кнопка "Удалить", удаляющая клиента из БД (каскадно все его нерабочие заказы). Кнопка "Редактировать", переводящая на страницу редактирования клиента. Кнопка "Посмотреть", переводяшая на страницу клиента.
- Кнопка "Добавить клиента", переход на страницу добавления клиента.
Форма добавления клиента с различными полями.
- ФИО
- Адрес
- Телефон
Кнопка "Добавить клиента".
- Информация о клиенте (id, ФИО, адрес, телефон, email).
- Список заказов клиента.
- Кнопка "Редактировать", переводящая на страницу редактирования клиента.
- Кнопка "Удалить", удаляющая клиента из БД (каскадно все его нерабочие заказы).
Форма редактирования клиента с различными полями. Аналогично добавлению.
- По умолчанию выводится список всех заказов с пагинацией по страницам. Поле поиска по id заказа, кнопка "Найти". Поля фильтров, позволяющие задать атрибуты заказов, кнопка применения фильтров.
- В списке в карточке каждого заказа приведена информация о нём (ID, ФИО клиента - кликабельно, производитель + модель автомобиля - кликабельно, дата и время создания, статус). Кнопка "Редактировать", переводящая на страницу редактирования заказа. Кнопка "Посмотреть", переводяшая на страницу заказа.
- Кнопка "Создать заказ", переход на страницу создания заказа.
Форма создания заказа с различными полями.
- VIN автомобиля. Autocomplete поле. "VIN + производитель + модель". Выбрать можно только автомобили в наличии.
- ФИО клиента. Autocomplete поле. "ID + ФИО".
- Флажок "Нужен тест-драйв".
- Статус заказа. Выпадающий список статусов - по умолчанию доступны для выбора "В работе", "Отменён", "Ожидание оплаты", "Оплачен", "Завершён". Если в таблице есть другой заказ с таким автомобилем и статусом "На тест-драйве", то такой статус недоступен для выбора и выводится сообщение, что автомобиль в данный момент занят. Иначе выставление статуса "На тест-драйве" доступно. При выставлении статуса "На тест-драйве" поле-флаг tested ("Был в тест-драйве") устанавливается в True - это сохраняет информацию, что автомобиль в ходе заказа тестировался клиентом.
- Дата и время заполняются автоматически при создании заказа.
Кнопка "Создать заказ".
- Информация о заказе (информация об автомобиле, клиенте, заказе).
- Кнопка "Редактировать", переводящая на страницу редактирования заказа.
Форма редактирования заказа с различными полями. Всё аналогично созданию. При изменении статуса на "Завершён" поле "Наличие" автомобиля устанавливается в False.
Главная -> каталог автомобилей
Каталог автомобилей -> кнопка "Добавить автомобиль"
- Каталог автомобилей -> выбрать автомобиль в списке -> кнопка "Посмотреть"
- Список автомобилей на странице модели -> выбрать автомобиль в списке -> кнопка "Посмотреть"
- Страница автомобиля -> кнопка "Редактировать"
- Аналогично пунктам в "Посмотреть страницу автомобиля", но кнопка "Редактировать"
Аналогично "Редактировать автомобиль", но кнопка "Удалить"
Главная -> список моделей
Список моделей -> кнопка "Добавить модель"
- Список моделей -> выбрать модель в списке -> кнопка "Посмотреть"
- Список моделей на странице производителя -> выбрать модель в списке -> кнопка "Посмотреть"
- Страница модели -> кнопка "Редактировать"
- Аналогично пунктам в "Посмотреть страницу модели", но кнопка "Редактировать"
Аналогично "Редактировать модель", но кнопка "Удалить"
Главная -> список производителей
Список производителей -> поле и кнопка "Добавить производителя"
- Список производителей -> выбрать производителя в списке -> кнопка "Посмотреть"
- Страница производителя -> поле редактирования
- Список производителей -> выбрать производителя в списке -> поле редактирования
Аналогично "Редактировать производителя", но кнопка "Удалить"
Главная -> список клиентов
Список клиентов -> кнопка "Добавить клиента"
Список клиентов -> выбрать клиента в списке -> кнопка "Посмотреть"
- Страница клиента -> кнопка "Редактировать"
- Аналогично "Посмотреть страницу клиента", но кнопка "Редактировать"
Аналогично "Редактировать клиента", но кнопка "Удалить"
Главная -> список заказов
Список заказов -> кнопка "Создать заказ"
- Список заказов -> выбрать заказ в списке -> кнопка "Посмотреть"
- Страница клиента -> Список его заказов -> выбрать заказ в списке -> кнопка "Посмотреть"
- Страница заказа -> кнопка "Редактировать"
- Аналогично "Посмотреть страницу заказа", но кнопка "Редактировать"
Страница заказа -> возможен статус "На тест-драйве", булево поле "Был на тест-драйве", булево поле "Нужен тест-драйв"
- Страница клиента -> список заказов -> в карточке заказа возможен статус "На тест-драйве"
- Страница клиента -> список заказов -> страница заказа -> возможен статус "На тест-драйве", булево поле "Был в тест-драйве", булево поле "Нужен тест-драйв"
- Страница автомобиля -> список клиентов, бравших автомобиль на тест-драйв; клиент, у которого автомобиль сейчас на тест-драйве