production_solution.drawio
Вертикально и горизонтально масштабируемый сервис. Сервис разделяется на фронтенд, распределитель нагрузки, бэкенд, СУБД. Можно размножать количество бэкенд серверов.
db_schema.drawio
Сервис использует СУБД PostgreSQL.
База данных разделяется на несколько таблиц:
account, employee, agent_point, task, task_status, task_manual
Таблица с данными об аккаунтах пользователей. Содержит логин, пароль, ФИО и роль. Пароль хранится в БД в виде хэша. Методы сервиса не возвращают пароль-хеш.
Таблица с данными о сотрудниках. Содержит грейд сотрудника и адрес начала работы.
Таблица с агентскими точками. Содержит адрес точки, время подключения, доставлены ли материалы, Кол-во дней после выдачи последней карты, Кол-во одобренных заявок, Кол-во выданных карт.
Таблица с задачами. Содержит тип задачи, дату выполнения, начало времени выполнения, сколько часов занимает задача, дистанция до задачи от работника, номер в очереди по счету сегодняшних задач
Таблица со статусом задачи. Содержит выполнена ли задача, комментарий. Сотрудник может ставить статус задаче и оставлять комментарии по мере выполнения задачи.
Таблица с типом задачи и условиями задачи. Содержит приоритет, время выполнения, требуемый уровень сотрудника. В зависимости от типа задачи содержит разные условия. Хранятся условия в виде json. Поле в базе данных представляет собой абстрактный класс BaseTaskManual, который могут унаследовать разные задачи. Условия в зависимости от сохраняемого класса (типа задачи):
Для задачи выезда на точку для стимулирования выдач: число в первом условии и число во втором условии.
Для задачи обучения агента: число, которое выражает процент; второе число.
Для задачи доставки карт и материалов: время подключения.
Схема api доступна:
api_schema.yaml
В некоторых методах добавлена возможность пагинации. Методы разделены правами доступа на Админа, менеджера и сотрудника. Методы защищены http basic authentication.
Всего 5 заголовков, которые соответствуют названиям таблиц в БД: Accounts, Agent points, Task manual, Employees, Tasks.
Accounts. В методах нельзя получить пароль.
Task manual. Методы для разных задач разделены разными url путями.
Java 17, Spring, PostgreSQL, Docker, GraphHopper, Jenetics, traefik
API token GraphHopper используется только для геокодинга. Построением маршрутов занимается подтянутый с помощью pom.xml open source, установленный локально движок graphhopper.
Можно динамически указывать порты, настройки БД, токен к graphhoper geocoding в файле:
.env
При первом запуске приложения graphhopper обрабатывает карты и сохраняет на диске. Следующие запуски проходят быстрее.
- Убедитесь, что у вас установлен Docker
- Склонируйте данный репозиторий к себе
git clone https://github.com/arsuhinars/leaders-backend-2023
- Скачайте файлы, необходимые для поиска путей
mkdir -p graph_hopper curl https://download.geofabrik.de/russia/south-fed-district-latest.osm.pbf > ./graph_hopper/south-fed-district-latest.osm.pbf
Примечание: для работы приложения по всей России, нужно скачать карту всей России. Можно также ограничиться нужным вам регионом.
- Разворачиваем сервис
docker compose up -d
Внимание: первый запуск может занять продолжительное время, так как будет рассчитываться кэш для поиска путей
- После успешного запуска, веб-сервис будет доступен по адресу http://localhost:80
- Для остановки сервиса воспользуйтесь командой:
docker compose down -v