Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/angryelizar/resourcebooking
ResourceBooking API - система бронирования ресурсов (тестовое задание)
https://github.com/angryelizar/resourcebooking
java liquibase rest-api spring spring-security springboot swagger
Last synced: 23 days ago
JSON representation
ResourceBooking API - система бронирования ресурсов (тестовое задание)
- Host: GitHub
- URL: https://github.com/angryelizar/resourcebooking
- Owner: angryelizar
- Created: 2024-10-13T18:50:59.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2024-10-20T22:12:39.000Z (30 days ago)
- Last Synced: 2024-10-21T02:30:56.525Z (30 days 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 для тестирования.
### Тестовые данные:- **Администратор:**
Логин: `[email protected]`
Пароль: `qwerty`- **Пользователь:**
Логин: `[email protected]`
Пароль: `qwerty`### Запуск проекта:
1. Клонируйте репозиторий.
2. Настройте базу данных PostgreSQL.
3. Запустите приложение через Maven/Gradle.
4. Используйте Swagger для тестирования API.### Postman Collection:
Коллекция для тестирования API доступна в проекте и может быть импортирована в Postman для демонстрации функциональности.