https://github.com/angryelizar/resourcebooking
ResourceBooking API - система бронирования ресурсов (тестовое задание)
https://github.com/angryelizar/resourcebooking
java liquibase rest-api spring spring-security springboot swagger
Last synced: about 2 months ago
JSON representation
ResourceBooking API - система бронирования ресурсов (тестовое задание)
- Host: GitHub
- URL: https://github.com/angryelizar/resourcebooking
- Owner: angryelizar
- Created: 2024-10-13T18:50:59.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-20T22:12:39.000Z (over 1 year ago)
- Last Synced: 2025-06-08T10:03:51.176Z (about 1 year ago)
- Topics: java, liquibase, rest-api, spring, spring-security, springboot, swagger
- Language: Java
- Homepage:
- Size: 167 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Система бронирования ресурсов
## Описание проекта
Система для управления бронированием различных ресурсов, таких как переговорные комнаты, оборудование или автомобили, с интеграцией различных способов оплаты. Проект поддерживает управление ресурсами, бронирование и оплату, а также предоставляет функционал для администраторов и пользователей.
### Функциональные требования:
1. **Создание и управление ресурсами:**
- Администраторы могут добавлять, редактировать, активировать, деактивировать и удалять ресурсы.
- Каждый ресурс имеет уникальный идентификатор, имя, описание и статус активности.
2. **Управление бронированием:**
- Пользователи могут бронировать ресурсы на определенное время с учетом их доступности.
- Система предотвращает конфликты бронирований и поддерживает оплату через различные платежные системы.
3. **Интеграция оплаты:**
- Пользователи могут оплатить бронирование через PayPal, банковские карты и другие системы.
- Реализована поддержка моментальной и отложенной оплаты.
4. **Управление пользователями:**
- Различные роли: администраторы управляют ресурсами и платежами, а пользователи бронируют и оплачивают.
5. **Журналирование и логирование:**
- Все действия записываются в журнал через **Slf4j** от Lombok. Логи сохраняются в файл.
6. **API:**
- REST API реализовано для всех действий, с подробной документацией через Swagger.
7. **Оптимизация и производительность:**
- Включена поддержка пагинации для больших объемов данных.
## Стек технологий:
- Java 17
- Spring Boot
- Spring Data JPA
- Spring Security
- PostgreSQL
- Lombok
- Liquibase для миграций
- Swagger для документации
## План выполненных задач:
### Миграции
- Созданы и заполнены таблицы для:
- authorities, users, resources, bookings, payments, payment_statuses, payment_methods.
### Реализация сущностей и репозиториев
- Созданы модели и репозитории для:
- authority, user, resource, booking, payment_status, payment_method, payment.
### Конфигурация
- **Spring Security:** Настроен доступ к различным маршрутам в зависимости от ролей пользователей.
- **Swagger:** Документирует каждый DTO и эндпоинт.
- **Slf4j:** Логирование всех действий через Lombok Slf4j.
- **GlobalExceptionHandler:** Исключения обрабатываются централизованно для каждой сущности.
### Валидация данных
- Все DTO, принимаемые через POST и PUT запросы, проходят валидацию на корректность.
### Паттерн "Стратегия" для оплаты
- Реализован паттерн "Стратегия" для работы с различными способами оплаты (банковские карты, PayPal и др.).
### Функциональность
- Регистрация пользователей.
- Управление ресурсами (CRUD).
- Бронирование ресурсов с проверкой на пересечение дат.
- Оплата бронирований.
- Управление платежами и статусами.
- Пагинация для просмотра данных (брони, платежи).
## Особенности проекта:
- **BaseEntity** использован для моделей с общими полями.
- **DTO на основе Record:** Использованы для передачи данных между клиентом и сервером.
- **Оптимизация запросов:** Включена пагинация для уменьшения нагрузки на сервер при больших объемах данных.
- **Математическая проверка пересечений бронирований:** Точное и быстрое вычисление конфликтов бронирований.
- **Начальные данные:** Система заполняется начальными данными через Liquibase для тестирования.
### Тестовые данные:
- **Администратор:**
Логин: `conovalov.elizar@gmail.com`
Пароль: `qwerty`
- **Пользователь:**
Логин: `saadanbekov@gmail.com`
Пароль: `qwerty`
### Запуск проекта:
1. Клонируйте репозиторий.
2. Настройте базу данных PostgreSQL.
3. Запустите приложение через Maven/Gradle.
4. Используйте Swagger для тестирования API.
### Postman Collection:
Коллекция для тестирования API доступна в проекте и может быть импортирована в Postman для демонстрации функциональности.