fleet-ble-monitor/backend/README.md

162 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Fleet BLE Monitor Backend
Backend starter для системы Fleet BLE Monitor.
Стек:
- Kotlin
- Spring Boot
- Spring GraphQL
- Spring Data JPA
- PostgreSQL
- Docker Compose для локальной базы
## Быстрый локальный запуск
Из папки `backend`:
```powershell
cd docker
docker compose up -d
cd ..
.\gradlew.bat clean bootRun
```
После запуска приложение доступно по адресу:
```text
http://localhost:8080/api
```
GraphiQL:
```text
http://localhost:8080/api/graphiql
```
GraphQL endpoint:
```text
http://localhost:8080/api/graphql
```
## Локальная PostgreSQL
Docker Compose поднимает контейнер:
```text
fleet-ble-monitor-postgres
```
Внутри контейнера PostgreSQL слушает порт `5432`, но на хост проброшен порт `55432`.
Это сделано специально, чтобы локальный запуск не конфликтовал с установленным на машине PostgreSQL, который часто уже занимает `localhost:5432`.
Параметры подключения по умолчанию:
```text
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_HOST`
- `DB_NAME`
- `DB_USER`
- `DB_PASSWORD`
Если переменные не заданы, используются дефолты из `src/main/resources/application.yml`.
## Полный сброс локальной базы
Если контейнер уже создавался раньше с другими `POSTGRES_USER` / `POSTGRES_PASSWORD`, PostgreSQL сохранит старые учетные данные в Docker volume. В таком случае изменение `docker-compose.yml` уже не поменяет пароль существующей базы.
Для полного сброса локальной базы:
```powershell
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`.
```text
admin / 123456
admin@fleet.local / 123456
user / 123456
user@fleet.local / 123456
```
## Пример login mutation
```graphql
mutation {
login(payload: { loginOrEmail: "admin", password: "123456" }) {
token
user {
id
login
email
role
}
}
}
```
Для запросов, требующих авторизации, передавай токен в HTTP header:
```text
Authorization: Bearer <token>
```
## Пример списка АТТ
```graphql
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.