Skip to content

Микросервисное приложение на Spring Boot с базой данных PostgreSQL для хранения информации о вещах в формате доски объявлений для последующей аренды пользователями

Notifications You must be signed in to change notification settings

kirshumir01/java-shareit

Repository files navigation

ShareIt

Описание


Представьте, что на воскресной ярмарке вы купили несколько картин и хотите повесить их дома. Но вот незадача — для этого нужна дрель, а её у вас нет. Можно, конечно, пойти в магазин и купить, но в такой покупке мало смысла — после того, как вы повесите картины, дрель будет просто пылиться в шкафу. Можно пригласить мастера — но за его услуги тоже нужно заплатить. И тут вы вспоминаете, что видели дрель у друга. Сама собой напрашивается идея — одолжить её.

Большая удача, что у вас оказался друг с дрелью и вы сразу вспомнили про него! Иначе в поисках инструмента пришлось бы писать всем друзьям и знакомым. Или вернуться к первым двум вариантам — покупке дрели или найму мастера.

Насколько было бы удобнее, если бы под рукой был сервис, с помощью которого пользователи делятся вещами!

Структура проекта и функциональность


  • вещи (предметы):
    • модель данных: название, описание, возможность аренды, владелец, запрос на аренду;
    • валидация данных: название, описание, владелец не могут быть пустыми;
    • действия: добавление, редактирование, получение информации (название, описание, владелец вещи);
    • функционал: просмотр информации о вещи (название, описание, отзывы пользователей, доступность к аренде), поиск вещи по названию или описанию.
  • пользователи:
    • модель данных: имя, логин, email;
    • валидация данных: email не может быть пустым и должна быть уникальным, логин не может быть пустым и содержать пробелы;
    • действия: добавление, обновление, хранение, получение и удаление;
    • функционал: добавление вещи (владелец), добавление отзыва (комментария) к вещи (арендатор).
  • запросы на бронирование вещей:
    • модель данных: описание, инициатор запроса на бронирование, дата и время создания запроса на бронирование;
    • валидация данных: запрос не может быть создан без информации об инициаторе, дата и время создания запроса не могут быть пустыми;
    • функционал: создание запроса на бронирование вещи и получение информации о запросах на бронирования вещи арендатором или владельцем вещи, создание ответа на запрос (описание и дата создания запроса; информация о пользователе, создавшем запрос на аренду).
  • бронирования:
    • модель данных: дата и время начала и завершения бронирования, информация о вещи и об арендаторе, статус бронирования;
    • валидация данных: дата и время начала и завершения бронирования, статус бронирования не могут быть пустыми;
    • действия: создание бронирования, подтверждение бронирования владельцем вещи, получение информации о бронировании по id и пользователю, получение арендатором или владельцем вещи информации о бронированиях вещи с сортировкой по дате от более новых к более старым, в том числе с возможностью просмотра владельцем вещи дат последнего и ближайшего следующего бронирования вещи.
    • функционал: хранение статус состояния бронирования.
  • отзывы (комментарии) пользователей:
    • модель данных: содержание, идентификаторы пользователя и вещи, дата и время создания отзыва;
    • валидация данных: содержание не может быть пустым;
    • действия: создание отзыва (комментария) к вещи после бронирования.
  • статусы состояния бронирований:
    • WAITING - ожидание;
    • APPROVED - подтвержденное бронирование;
    • REJECTED - отклоненное бронирование;
    • CANCELLED - закрытое бронирование.

Обработка исключений

  • ошибки валидации данных - код ответа 400 Bad Request;
  • ошибки валидации аргументов метода - код ответа 400 Bad Request;
  • ошибки поиска объекта - код ответа 404 Not Found;
  • ошибка поиска владельца вещи - код ответа 403 Forbidden;
  • ошибка сохранения новых данных - код ответа 409 Conflict
  • внутренние ошибки сервера - код ответа 500 Internal Server Error.

Каркас приложения

Приложение состоит из двух взаимосвязанных модулей, которые взаимодействуют друг с другом через сетевой порт 9090:

  • shareIt-server - содержит основную логику приложения;
  • shareIt-gateway - содержит контроллеры, с которыми непосредственно работают пользователи, и всю валидацию входных данных — кроме той, которая требует работы с базой данных.

Инструменты и технологии


  • Java 21
  • фреймворк: Spring Boot
  • аннотирование классов приложения: Lombok
  • хранение данных (рабочий режим): Postgre SQL
  • хранение данных (режим тестирования): H2 Database
  • сборка и управление зависимостями: Apache Maven 3.9.9

Схема базы данных приложения (ER-диаграмма)


ER-diagram

Инструменты для запуска приложения


  • Java Development Kit (JDK) - версия 21 или более поздняя;
  • Apache Maven - версия 3.9.9 или более поздняя.

Инструкции по установке JDK

Ниже приведены инструкции по установке JDK 21 на различных операционных системах.


Установка на macOS

Установите Homebrew запуском следующей команды в терминале (командной строке) операционной системы:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Установите JDK 21 с помощью Homebrew:

brew install openjdk@21

Создайте символическую ссылку, чтобы система могла найти JDK:

sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk

Добавьте JDK 21 в PATH. Откройте файл .zshrc (или .bash_profile, в зависимости от используемой оболочки) и добавьте следующую строку:

echo 'export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"' >> ~/.zshrc

Перезагрузите терминал или примените изменения с помощью команды:

source ~/.zshrc

Проверьте установленную версию Java:

java -version

Установка на Linux

Откройте терминал и выполните команду для обновления списка пакетов:

sudo apt update

Установите JDK 21:

sudo apt install openjdk-21-jdk

Убедитесь, что JDK установлен и настроен корректно:

java -version

Установка на Windows
  1. Скачайте установочный файл JDK 21 с официального сайта Oracle или OpenJDK.

  2. Запустите установочный файл и следуйте инструкциям установщика.

  3. После установки настройте переменную среды JAVA_HOME:

  • откройте Системные настройки > Переменные среды;
  • в разделе Системные переменные нажмите Создать и введите:
    • имя переменной: JAVA_HOME
    • значение переменной: путь к установленной JDK (например, C:\Program Files\Java\jdk-21).
  • добавьте JAVA_HOME\bin в переменную Path.
  1. Проверьте версию Java в командной строке:
java -version

Инструкции по установке Maven

Ниже приведены инструкции по установке Maven на различных операционных системах.


Установка на macOS

Установите Homebrew, если он еще не установлен:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Установите Maven с помощью Homebrew:

brew install maven

Проверьте версию Maven, чтобы убедиться в правильной установке:

mvn -version

Установка на Linux

Откройте терминал и загрузите Apache Maven 3.9.9:

wget https://downloads.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz

Распакуйте архив:

tar xzvf apache-maven-3.9.9-bin.tar.gz

Переместите распакованную папку в директорию /opt/:

sudo mv apache-maven-3.9.9 /opt/maven

Добавьте Maven в PATH. Откройте файл .bashrc или .zshrc и добавьте следующую строку:

export PATH=/opt/maven/bin:$PATH

Примените изменения:

source ~/.bashrc

Проверьте версию Maven:

mvn -version

Установка на Windows
  1. Скачайте установочный архив Maven 3.9.9 с официального сайта.

  2. Распакуйте архив в удобное место, например C:\Program Files\Maven.

  3. Настройте переменные среды:

  • откройте Системные настройки > Переменные среды.
  • в разделе Системные переменные нажмите Создать и добавьте:
    • имя переменной: MAVEN_HOME
    • значение переменной: путь к папке Maven, например C:\Program Files\Maven.
  • найдите переменную Path, выберите ее и нажмите Изменить. Добавьте новый путь: %MAVEN_HOME%\bin.
  1. Перезапустите командную строку и проверьте версию Maven:
mvn -version

Подготовка и запуск приложения


ВАЖНО! Запуск приложения осуществляется через системный порт 8080. Перед запуском убедитесь, что порт 8080 свободен!

Как проверить, что системный порт свободен?

Ниже приведены инструкции по проверке порта на различных операционных системах.


Проверка порта на macOS

Откройте терминал.

Выполните следующую команду, заменив PORT на номер порта, который нужно проверить:

lsof -i :PORT

Если порт занят, команда выведет список процессов, использующих порт. Для завершения процесса используйте команду:

kill -9 PID

где PID — идентификатор процесса из вывода предыдущей команды.

Если порт свободен, команда не вернет никаких данных.


Проверка порта на Linux

Откройте терминал.

Выполните следующую команду, заменив PORT на номер порта:

sudo lsof -i :PORT

Если порт занят, команда выведет список процессов, использующих порт. Для завершения процесса используйте команду:

sudo kill -9 PID

где PID — идентификатор процесса из вывода предыдущей команды.

Если порт свободен, команда не вернет никаких данных.


Проверка порта на Windows

Откройте командную строку (cmd) или PowerShell с правами администратора.

Выполните следующую команду, заменив PORT на номер порта:

netstat -aon | findstr :PORT

Если порт занят, команда выведет информацию о процессе, использующем порт. Обратите внимание на PID (идентификатор процесса).

Чтобы завершить процесс, откройте Диспетчер задач, перейдите на вкладку Подробности, найдите процесс с соответствующим PID и завершите его.

Если порт свободен, команда не вернет никаких данных.

Где следует выполнять команды для запуска приложения?

  • в терминале (командной строке) операционной системы;
  • в программной среде разработки IntelliJ IDEA непосредственно в данном файле нажатием на символ тройной стрелки >>>, расположенной слева от строки описания соответствующей команды.

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


  1. Склонируйте репозиторий с использованием следующей команды:
git clone https://github.com/kirshumir01/java-shareit.git
  1. Перейдите в корневую директорию склонированного проекта и выполните последовательно команды:
cd java-shareit
  1. Запустите приложение, выполнив последовательно следующие команды в двух отдельных окнах терминала:
mvn -pl :shareit-server spring-boot:run
mvn -pl :shareit-gateway spring-boot:run

Доступ к публичному API будет открыт по ссылке через адресную строку интернет-браузера: http://localhost:8080.

About

Микросервисное приложение на Spring Boot с базой данных PostgreSQL для хранения информации о вещах в формате доски объявлений для последующей аренды пользователями

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published