Сервис бронирования переговорных комнат на Spring Boot с поддержкой конкурентного доступа.
- Регистрация и аутентификация пользователей (JWT)
- Создание, перенос и отмена бронирований
- Защита от конфликтов бронирований (EXCLUDE constraint в PostgreSQL)
- Retry-механизм при deadlock для обработки race conditions
- Server-Sent Events (SSE) для уведомлений в реальном времени
- Swagger UI документация API
- Миграции базы данных через Flyway
- Интеграция с RabbitMQ для асинхронных событий
- Java 21
- Spring Boot 4.0.6
- PostgreSQL 16
- Flyway (миграции БД)
- RabbitMQ (очередь событий)
- JWT (аутентификация)
- Swagger/OpenAPI 3
- Java 21+
- Docker и Docker Compose
- Maven (или используйте mvnw)
docker compose up -dЭто запустит PostgreSQL (порт 5433) и RabbitMQ (порт 5672).
./mvnw flyway:migrate./mvnw clean package -DskipTestsjava -jar target/booking-0.0.1-SNAPSHOT.jarИли через Maven:
./mvnw spring-boot:run| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/auth/login |
Вход (получение JWT токена) |
| POST | /api/auth/register |
Регистрация пользователя |
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/bookings |
Создать бронирование |
| GET | /api/bookings |
Получить все бронирования |
| GET | /api/bookings/room/{roomId} |
Получить бронирования комнаты |
| PUT | /api/bookings/{bookingId}/move |
Перенести бронирование |
| DELETE | /api/bookings/{bookingId} |
Отменить бронирование |
| GET | /api/bookings/room/{roomId}/slots |
Получить доступные слоты |
| GET | /api/bookings/stream |
SSE поток событий комнаты |
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/rooms |
Получить все комнаты |
| POST | /api/rooms |
Создать комнату |
| PUT | /api/rooms/{id} |
Обновить комнату |
| DELETE | /api/rooms/{id} |
Удалить комнату |
Откройте http://localhost:8080/swagger-ui/index.html для интерактивной документации API.
Для защищённых endpoints используйте JWT токен в заголовке:
Authorization: Bearer <token>
Основные настройки в src/main/resources/application.yaml:
spring:
datasource:
url: jdbc:postgresql://localhost:5433/bookingdb
username: postgres
password: postgres
flyway:
enabled: true
locations: classpath:db/migration
rabbitmq:
host: localhost
port: 5672
jwt:
secret: ваш-секретный-ключ
expiration: 86400000./mvnw testСкрипт test-concurrency.sh