|
|
||
|---|---|---|
| .. | ||
| .gradle | ||
| .idea | ||
| .kotlin/errors | ||
| build | ||
| docker | ||
| gradle/wrapper | ||
| src/main | ||
| .env.example | ||
| README.md | ||
| build.gradle.kts | ||
| gradlew | ||
| gradlew.bat | ||
| settings.gradle.kts | ||
README.md
Fleet BLE Monitor Backend
Backend starter для системы Fleet BLE Monitor.
Стек:
- Kotlin
- Spring Boot
- Spring GraphQL
- Spring Data JPA
- PostgreSQL
- Docker Compose для локальной базы
Быстрый локальный запуск
Из папки backend:
cd docker
docker compose up -d
cd ..
.\gradlew.bat clean bootRun
После запуска приложение доступно по адресу:
http://localhost:8080/api
GraphiQL:
http://localhost:8080/api/graphiql
GraphQL endpoint:
http://localhost:8080/api/graphql
Локальная PostgreSQL
Docker Compose поднимает контейнер:
fleet-ble-monitor-postgres
Внутри контейнера PostgreSQL слушает порт 5432, но на хост проброшен порт 55432.
Это сделано специально, чтобы локальный запуск не конфликтовал с установленным на машине PostgreSQL, который часто уже занимает localhost:5432.
Параметры подключения по умолчанию:
DB_HOST=localhost:55432
DB_NAME=fleet_ble_monitor
DB_USER=fleet_user
DB_PASSWORD=fleet_password
SERVER_PORT=8080
SEED_ENABLED=true
Эти же значения указаны в .env.example.
Spring использует переменные:
DB_HOSTDB_NAMEDB_USERDB_PASSWORD
Если переменные не заданы, используются дефолты из src/main/resources/application.yml.
Полный сброс локальной базы
Если контейнер уже создавался раньше с другими POSTGRES_USER / POSTGRES_PASSWORD, PostgreSQL сохранит старые учетные данные в Docker volume. В таком случае изменение docker-compose.yml уже не поменяет пароль существующей базы.
Для полного сброса локальной базы:
cd docker
docker compose down -v
docker compose up -d
cd ..
.\gradlew.bat clean bootRun
Команда docker compose down -v удаляет локальный volume PostgreSQL. Все локальные данные будут потеряны.
Тестовые пользователи
Seed-данные создаются при первом запуске, если база пустая и SEED_ENABLED=true.
admin / 123456
admin@fleet.local / 123456
user / 123456
user@fleet.local / 123456
Пример login mutation
mutation {
login(payload: { loginOrEmail: "admin", password: "123456" }) {
token
user {
id
login
email
role
}
}
}
Для запросов, требующих авторизации, передавай токен в HTTP header:
Authorization: Bearer <token>
Пример списка АТТ
query {
getMachines(
page: 0
pageSize: 20
sortDirection: ASC
sortField: NAME
) {
totalElements
page {
id
name
licensePlate
lastKnownState
beacon {
identifier
macAddress
status
}
}
}
}
Что доделывать дальше
- нормальную авторизацию через JWT/AD/LDAP;
- миграции Flyway/Liquibase вместо
ddl-auto: update; - полноценный алгоритм распознавания состояний из телеметрии;
- генерацию XLSX/PDF на backend;
- scheduler рассылки отчетов;
- права доступа на уровне GraphQL resolver/use-case.