Проект представляет собой backend-сервис, написанный на Kotlin с использованием Ktor. Он предоставляет REST API для работы с турами, местами, историями и AR объектами. Для доступа к базе данных используется Exposed, таблицы определены через UUIDTable, а миграции – Flyway (или ручное управление через SQL).
🔐 Аутентификация
- POST /auth/register — регистрация нового пользователя. Пароль передаётся в зашифрованном виде, возвращается токен.
- POST /auth/login — вход пользователя. Пароль также зашифрован, в ответ — токен.
🔑 Шифрование
- GET /encryption/publicKey — получить публичный RSA-ключ для шифрования пароля на клиенте.
🗺️ Туры
- GET /tours — получить список туров (опционально с параметром
limit
). - GET /tours/{id} — получить детальную информацию о туре, включая связанные истории.
- POST /tours/{id}/start — начать прохождение тура.
- POST /tours/{id}/finish — завершить прохождение тура.
🏛️ AR-объекты
- POST /tours/ar/{arObjectId}/scan — отсканировать AR-объект (добавление в прогресс пользователя).
📖 Истории (в рамках тура)
- POST /tours/histories/{historyId}/complete — пометить историю как пройденную пользователем.
📍 Места
- GET /places — получить список мест (опционально с параметром
limit
). - GET /places/{id} — получить информацию о конкретном месте.
📊 Статистика
- GET /stats — получить пользовательскую статистику прохождений.
🔈 Озвучка (TTS)
- POST /tts — получить аудио озвучку текста истории в формате
audio/wav
.
Используется PostgreSQL. Таблицы создаются через Exposed:
tours
(таблица туров)histories
(истории, с внешним ключом наtours
)places
(достопримечательности)users
(пользователи)- 4 доп таблицы для отслеживания прогресса пользователя Подключение настраивается через YAML-конфиг
Flyway используется для миграций. Скрипты-модели миграций (например, добавление нового поля) храните в src/main/resources/db/migration
. При старте вызывается Flyway.migrate()
и выполняется миграция только для новых скриптов.
Логирование организовано с помощью Kotlin Logging и записи в локальный файл.
AreaBackend/
├── routes/ // Определение HTTP-маршрутов (Ktor routes)
├── data/
│ ├── db/ // Таблицы (Exposed) и DatabaseFactory (инициализация базы, миграций)
│ └── models / // Request models
│ └── service/ // Обертки над репозиториями для доп проверок
│ └── utils/ // Реализации и интерфейсы репозиториев
│ └── repository/ // Реализации и интерфейсы репозиториев
├── utils/ // Настройка шифрования, логирования и тд
├── models/ // Data классы
└── Application.kt // Точка входа (Ktor EngineMain)