PTKnowBackend - серверная часть платформы дополнительного образования PTKnow. Сервис предоставляет HTTP API для работы с пользователями, профилями, курсами, уроками и файлами
Сервер отвечает за:
- регистрацию, вход, обновление сессии и выход из системы
- выпуск и проверку JWT-токенов
- работу с профилями пользователей
- создание и ведение курсов
- создание и ведение уроков
- хранение markdown-содержимого уроков
- запись пользователей на курсы
- разграничение прав доступа
- загрузку, выдачу и удаление файлов
- административное управление пользователями
- публикацию OpenAPI-описания и Swagger UI
GUEST— пользователь вошёл в систему, но ещё не подтверждён колледжемSTUDENT— подтверждённый студентTEACHER— преподавательADMIN— администратор платформы
- аутентификация на основе JWT с access- и refresh-токенов
- защита refresh-токенов через хранение хэша
- ролевая модель и проверки владения ресурсами
- работа с профилями пользователей
- полный набор операций для курсов
- полный набор операций для уроков
- запись на курсы
- файловые вложения для профилей, курсов и уроков
- локальное файловое хранилище и поддержка S3-совместимого хранилища
- миграции Flyway
- обработка ошибок на уровне API
- ограничение частоты запросов для критичных точек входа
- кэширование безопасных запросов на чтение
- OpenAPI-описание и Swagger UI
- автоматическая проверка сборки, тестов и миграций
- Java 25
- Spring Boot 4
- Spring Security
- Spring Data JPA и Hibernate
- PostgreSQL
- Flyway
- MapStruct
- JUnit 5 и Mockito
- Docker
- политика доступа и безопасности: SECURITY.md
- OpenAPI в формате JSON:
/v3/api-docs - OpenAPI в формате YAML:
/v3/api-docs.yaml - Swagger UI:
/swagger-ui.html
Для локального запуска без контейнеров нужны:
- Java 25
- PostgreSQL
Файл .env.example используется как шаблон значений для локального запуска.
Основные переменные:
PTKNOW_PORTPTKNOW_DATASOURCE_ADDRESSPTKNOW_DATASOURCE_NAMEPTKNOW_DATASOURCE_USERNAMEPTKNOW_DATASOURCE_PASSWORDJWT_ISSUERSECRET_JWT_KEYJWT_REFRESH_COOKIE_SECUREJWT_REFRESH_COOKIE_SAME_SITEAPP_FILE_UPLOAD_DIRAPP_FILE_STORAGE_TYPE
Spring Boot читает переменные окружения
Файл .env сам по себе автоматически не считывается. Его значения применяются только в тех сценариях, где этот файл предварительно загружается во внешние переменные окружения, например через Docker Compose или через конфигурацию запуска среды разработки либо командной оболочки
- Поднять PostgreSQL.
- Подготовить переменные окружения по шаблону
.env.example. - Запустить приложение:
./gradlew bootRunВместо этого можно запустить PTKnowApplication из среды разработки
В этом репозитории хранится только образ серверной части:
docker build -t ptknow-server .Полный сценарий развёртывания через Compose вынесен в отдельный репозиторий: PTKnowDeployment.
Запуск тестов:
./gradlew testFlyway применяется автоматически при запуске приложения
JPA работает в режиме ddl-auto=validate
Это означает:
- структура базы данных должна создаваться миграциями
- Hibernate только проверяет соответствие сущностей и схемы