Skip to content

Otmetka-X-hackathon/lukoil_backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

LUKOIL PWA Application

Разработка 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 представляет собой компактный и самоописывающийся механизм передачи данных в виде токена между двумя сторонами. Он удобен в использовании благодаря своей простоте и легковесности, а также обеспечивает безопасность передаваемой информации.

Controllers

ProductController

  • Описание: Контроллер для работы с продуктами.
  • Методы:
    • GET /api/lukoil/top20/product: Получение топ 20 продуктов по покупкам за сегодня.

QRCodeController

  • Описание: Контроллер для работы с QR-кодами.
  • Методы:
    • GET /api/lukoil/QRCode: Генерация QR-кода с названием команды.

SecurityController

  • Описание: Контроллер для обеспечения безопасности.
  • Методы:
    • POST /api/lukoil/login: Вход пользователя по номеру телефона и коду.

Tables

Product

  • Описание: Сущность, представляющая продукт в базе данных.
  • Поля:
    • id: Уникальный идентификатор продукта.
    • name: Наименование продукта.
    • count: Общее количество преобретенного продукта.
    • countToDay: Количество продукта, преобретенное за текущий день.
    • region: Регион, в котором доступен продукт.
    • price: Цена продукта.

Security

  • Описание: Сущность, представляющая пользователя и его аутентификационные данные.
  • Поля:
    • id: Уникальный идентификатор пользователя.
    • phone: Номер телефона пользователя.
    • token: Токен доступа пользователя.
    • role: Роль пользователя (например, "Клиент" или "Сотрудник").

Эмуляция покупок

Наш проект предлагает уникальную и мощную эмуляцию покупок, которая позволяет создавать реалистичные сценарии покупок пользователей:

  • Удобное использование enum: Мы использовали enum для определения всех продуктов и регионов, что делает добавление новых товаров и регионов максимально удобным и понятным.

  • Автоматическая генерация товаров при запуске: При запуске приложения автоматически создаются все товары из нашего списка продуктов, что позволяет нам избежать рутинной работы по добавлению каждого товара вручную.

  • Генерация покупок в реальном времени: Наш компонент TransactionGenerator использует @Scheduled аннотации для генерации покупок в реальном времени. Он создает транзакции с покупками каждую минуту и сбрасывает счетчик продаж за текущий день в полночь каждый день.

  • Создание реалистичных сценариев: Мы стремимся к созданию максимально реалистичных сценариев покупок, чтобы имитировать поведение реальных пользователей. Наша система учитывает различные товары и регионы, что позволяет создавать разнообразные и интересные сценарии покупок.

С помощью этой уникальной эмуляции покупок мы можем проводить тестирование приложения в реальных условиях, а также анализировать поведение пользователей и оптимизировать наше приложение для лучшего пользовательского опыта.

Для эмуляции покупок в приложении используется компонент TransactionGenerator. Он содержит методы для генерации транзакций с покупками продуктов в разные моменты времени.

Методы

generateTransaction()

  • Описание: Метод генерирует транзакцию с покупкой продукта каждую минуту.
  • Действия:
    • Выбирает случайный продукт из базы данных.
    • Увеличивает счетчик продаж за текущий день для выбранного продукта.
    • В случае возникновения ошибки, логирует сообщение об ошибке.

runAtMidnight()

  • Описание: Метод сбрасывает счетчик продаж за текущий день в полночь каждый день.
  • Действия:
    • Сбрасывает счетчик продаж за текущий день для всех продуктов в базе данных.

saveAllProducts()

  • Описание: Метод сохраняет все продукты из перечисления ProductLukoil в базу данных.
  • Действия:
    • Создает и сохраняет каждый продукт из перечисления ProductLukoil для каждого региона из перечисления Region.
    • Присваивает начальные значения количества продуктов и их ценам.

Примечания

  • Для каждого продукта указывается его цена.
  • Приложение эмулирует покупки пользователей, увеличивая счетчик продаж за текущий день при каждой транзакции.
  • Счетчик продаж за текущий день сбрасывается в полночь для всех продуктов.

About

Development of a LUKOIL PWA app with phone authentication, "Product of the Day" section, transaction emulator, role-based model ("Client" and "Employee"), admin panel, and QR code generation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages