Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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 - система бронирования ресурсов (тестовое задание)

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 для демонстрации функциональности.