Skip to content

BrovkoRoman/booking

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Booking Service

Сервис бронирования переговорных комнат на 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)

1. Запуск баз данных

docker compose up -d

Это запустит PostgreSQL (порт 5433) и RabbitMQ (порт 5672).

2. Применение миграций БД

./mvnw flyway:migrate

3. Сборка проекта

./mvnw clean package -DskipTests

4. Запуск приложения

java -jar target/booking-0.0.1-SNAPSHOT.jar

Или через Maven:

./mvnw spring-boot:run

API Endpoints

Аутентификация

Метод 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} Удалить комнату

Swagger UI

Откройте 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors