ShareIt — это приложение для обмена вещами между пользователями. Оно позволяет пользователям создавать запросы на аренду вещей, бронировать их, оставлять отзывы и управлять своими вещами.
- Управление пользователями: создание, обновление, удаление и получение информации о пользователях.
- Управление вещами: добавление, обновление, удаление и поиск вещей.
- Бронирование вещей: создание, подтверждение и отмена бронирования.
- Запросы на аренду: создание и просмотр запросов на аренду вещей.
- Отзывы: возможность оставлять отзывы на арендованные вещи.
- Java 21
- Spring Boot
- RestTemplate для взаимодействия с основным сервисом
- Maven для сборки проекта
- Логирование с использованием Slf4j
-
Создание пользователя:
POST /users
Пример тела запроса:{ "name": "John Doe", "email": "john.doe@example.com" } -
Получение пользователя по ID:
GET /users/{user-id} -
Получение всех пользователей:
GET /users -
Обновление пользователя:
PATCH /users/{user-id}
Пример тела запроса:{ "name": "Jane Doe" } -
Удаление пользователя:
DELETE /users/{user-id}
-
Создание вещи:
POST /items
Пример тела запроса:{ "name": "Дрель", "description": "Мощная дрель для ремонта", "available": true } -
Получение вещи по ID:
GET /items/{item-id} -
Получение всех вещей пользователя:
GET /items -
Обновление вещи:
PATCH /items/{item-id}
Пример тела запроса:{ "description": "Мощная дрель с аккумулятором" } -
Удаление вещи:
DELETE /items/{item-id} -
Поиск вещей:
GET /items/search?text={query} -
Добавление отзыва:
POST /items/{item-id}/comment
Пример тела запроса:{ "text": "Отличная дрель, все работает!" }
-
Создание бронирования:
POST /bookings
Пример тела запроса:{ "itemId": 1, "start": "2023-10-10T10:00:00", "end": "2023-10-15T10:00:00" } -
Подтверждение бронирования:
PATCH /bookings/{booking-id}?approved=true -
Получение бронирования по ID:
GET /bookings/{booking-id} -
Получение всех бронирований пользователя:
GET /bookings?state={state} -
Получение бронирований владельца:
GET /bookings/owner?state={state}
-
Создание запроса:
POST /requests
Пример тела запроса:{ "description": "Нужна дрель для ремонта" } -
Получение запроса по ID:
GET /requests/{request-id} -
Получение всех запросов:
GET /requests/all -
Получение собственных запросов:
GET /requests
-
Убедитесь, что у вас установлены:
- Docker
- Docker Compose
-
Клонируйте репозиторий:
git clone https://github.com/your-repo/shareit.git cd shareit -
Запустите приложение с помощью Docker Compose:
docker-compose up --build
-
После запуска приложение будет доступно:
- Gateway:
http://localhost:8080 - Server:
http://localhost:9090
- Остановка приложения:
docker-compose down
Конфигурация docker-compose.yml включает следующие сервисы:
- PostgreSQL: База данных для хранения данных приложения.
- Gateway: Шлюз для обработки запросов и взаимодействия с основным сервисом.
- Server: Основной сервис приложения.
Пример конфигурации docker-compose.yml:
version: '3.8'
services:
db:
image: postgres:16.1
container_name: postgres
ports:
- "6541:5432"
environment:
- POSTGRES_PASSWORD=shareit
- POSTGRES_USER=shareit
- POSTGRES_DB=shareit
volumes:
- ./server/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/initDB.sql
healthcheck:
test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER
timeout: 5s
interval: 5s
retries: 10
gateway:
build: gateway
image: shareit-gateway
container_name: shareit-gateway
ports:
- "8080:8080"
depends_on:
- server
environment:
- SHAREIT_SERVER_URL=http://server:9090
server:
build: server
image: shareit-server
container_name: shareit-server
ports:
- "9090:9090"
depends_on:
db:
condition: service_healthy
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit
- SPRING_DATASOURCE_USERNAME=shareit
- SPRING_DATASOURCE_PASSWORD=shareit
volumes:
- ./server/src/main/resources/application.properties:/app/application.propertiesЕсли вы хотите собрать и запустить контейнеры вручную:
-
Соберите образы:
docker build -t shareit-gateway -f gateway/Dockerfile . docker build -t shareit-server -f server/Dockerfile .
-
Запустите контейнеры:
docker run -d --name postgres -p 6541:5432 \ -e POSTGRES_PASSWORD=shareit \ -e POSTGRES_USER=shareit \ -e POSTGRES_DB=shareit \ postgres:16.1 docker run -d --name shareit-server -p 9090:9090 \ -e SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit \ -e SPRING_DATASOURCE_USERNAME=shareit \ -e SPRING_DATASOURCE_PASSWORD=shareit \ shareit-server docker run -d --name shareit-gateway -p 8080:8080 \ -e SHAREIT_SERVER_URL=http://server:9090 \ shareit-gateway
-
Остановка контейнеров:
docker stop shareit-gateway shareit-server postgres docker rm shareit-gateway shareit-server postgres
-
Убедитесь, что у вас установлены:
- Java 21
- Maven
-
Клонируйте репозиторий:
git clone https://github.com/yiqes/java-shareit cd java-shareit -
Соберите проект:
mvn clean install
-
Запустите приложение:
mvn spring-boot:run
-
Приложение будет доступно по адресу:
http://localhost:8080
curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe", "email": "john.doe@example.com"}' http://localhost:8080/userscurl -X POST -H "Content-Type: application/json" -H "X-Sharer-User-Id: 1" -d '{"name": "Дрель", "description": "Мощная дрель", "available": true}' http://localhost:8080/itemscurl -X POST -H "Content-Type: application/json" -H "X-Sharer-User-Id: 2" -d '{"itemId": 1, "start": "2023-10-10T10:00:00", "end": "2023-10-15T10:00:00"}' http://localhost:8080/bookingsЛогирование настроено с использованием Slf4j. Логи можно найти в консоли или в файле logs/app.log.