Разработка PWA приложения для ЛУКОЙЛ, включающего авторизацию по номеру телефона, главный экран с информацией о баллах и прогрессе, раздел "Продукт дня", генератор транзакций для эмуляции покупок, а также реализацию ролевой модели с ролями "Клиент" и "Сотрудник", административной панелью и создание QR-кода с названием команды.
Для сборки проекта мы используем Maven. Программа может быть запущена следующим образом:
mvn clean install
java -jar server.jar
- Maven: Сборка проекта.
- Java / Spring Boot: Бэкенд написан на Java с использованием Spring Boot.
- Spring Data JPA: Используется для взаимодействия с базой данных.
- Spring Web: Для создания веб-интерфейса и обработки HTTP-запросов.
- Spring Security: Для обеспечения безопасности приложения.
- PostgreSQL: Реляционная система управления базами данных.
- JSON Web Tokens (JWT): Используется для аутентификации и создания токенов доступа.
- Lombok: Для упрощения разработки и уменьшения шаблонного кода.
- ZXing (Zebra Crossing): Библиотека для генерации QR-кодов.
Для управления доступом к различным частям приложения мы определили две роли: CLIENT и EMPLOYEE. Ниже приведено описание доступа для каждой роли:
-
CLIENT:
- Разрешен доступ к эндпоинту
/api/lukoil/top20/productметодом GET.
- Разрешен доступ к эндпоинту
-
EMPLOYEE:
- Разрешен доступ к эндпоинту
/api/lukoil/top20/productметодом GET. - Разрешен доступ к эндпоинту
/api/lukoil/loginметодом POST.
- Разрешен доступ к эндпоинту
Для авторизации и аутентификации пользователей в приложении используется JSON Web Token (JWT). JWT представляет собой компактный и самоописывающийся механизм передачи данных в виде токена между двумя сторонами. Он удобен в использовании благодаря своей простоте и легковесности, а также обеспечивает безопасность передаваемой информации.
- Описание: Контроллер для работы с продуктами.
- Методы:
GET /api/lukoil/top20/product: Получение топ 20 продуктов по покупкам за сегодня.
- Описание: Контроллер для работы с QR-кодами.
- Методы:
GET /api/lukoil/QRCode: Генерация QR-кода с названием команды.
- Описание: Контроллер для обеспечения безопасности.
- Методы:
POST /api/lukoil/login: Вход пользователя по номеру телефона и коду.
- Описание: Сущность, представляющая продукт в базе данных.
- Поля:
id: Уникальный идентификатор продукта.name: Наименование продукта.count: Общее количество преобретенного продукта.countToDay: Количество продукта, преобретенное за текущий день.region: Регион, в котором доступен продукт.price: Цена продукта.
- Описание: Сущность, представляющая пользователя и его аутентификационные данные.
- Поля:
id: Уникальный идентификатор пользователя.phone: Номер телефона пользователя.token: Токен доступа пользователя.role: Роль пользователя (например, "Клиент" или "Сотрудник").
Наш проект предлагает уникальную и мощную эмуляцию покупок, которая позволяет создавать реалистичные сценарии покупок пользователей:
-
Удобное использование enum: Мы использовали enum для определения всех продуктов и регионов, что делает добавление новых товаров и регионов максимально удобным и понятным.
-
Автоматическая генерация товаров при запуске: При запуске приложения автоматически создаются все товары из нашего списка продуктов, что позволяет нам избежать рутинной работы по добавлению каждого товара вручную.
-
Генерация покупок в реальном времени: Наш компонент TransactionGenerator использует @Scheduled аннотации для генерации покупок в реальном времени. Он создает транзакции с покупками каждую минуту и сбрасывает счетчик продаж за текущий день в полночь каждый день.
-
Создание реалистичных сценариев: Мы стремимся к созданию максимально реалистичных сценариев покупок, чтобы имитировать поведение реальных пользователей. Наша система учитывает различные товары и регионы, что позволяет создавать разнообразные и интересные сценарии покупок.
С помощью этой уникальной эмуляции покупок мы можем проводить тестирование приложения в реальных условиях, а также анализировать поведение пользователей и оптимизировать наше приложение для лучшего пользовательского опыта.
Для эмуляции покупок в приложении используется компонент TransactionGenerator. Он содержит методы для генерации транзакций с покупками продуктов в разные моменты времени.
- Описание: Метод генерирует транзакцию с покупкой продукта каждую минуту.
- Действия:
- Выбирает случайный продукт из базы данных.
- Увеличивает счетчик продаж за текущий день для выбранного продукта.
- В случае возникновения ошибки, логирует сообщение об ошибке.
- Описание: Метод сбрасывает счетчик продаж за текущий день в полночь каждый день.
- Действия:
- Сбрасывает счетчик продаж за текущий день для всех продуктов в базе данных.
- Описание: Метод сохраняет все продукты из перечисления
ProductLukoilв базу данных. - Действия:
- Создает и сохраняет каждый продукт из перечисления
ProductLukoilдля каждого региона из перечисленияRegion. - Присваивает начальные значения количества продуктов и их ценам.
- Создает и сохраняет каждый продукт из перечисления
- Для каждого продукта указывается его цена.
- Приложение эмулирует покупки пользователей, увеличивая счетчик продаж за текущий день при каждой транзакции.
- Счетчик продаж за текущий день сбрасывается в полночь для всех продуктов.