Приложение VegetableWarehouse — это учебный проект на базе Spring Boot, предназначенный для управления работой овощебазы (склада овощной продукции). Система позволяет вести учёт номенклатуры, поставщиков, клиентов, сотрудников, закупок, продаж и типов складов, а также управлять остатками товара на складе.
- Управление базой продуктов: CRUD‑операции над сущностью «База продуктов» (
/baseProducts), учёт товаров и их характеристик. - Учёт номенклатуры и складских единиц: сущности
Goods,Products,Units,TypeWarehouseи др. - Работа с контрагентами: учёт клиентов и поставщиков (модели
Clients,Suppliers). - Закупки и продажи: сущности
PurchaseиSalesдля фиксации движения товара. - Веб‑интерфейс: HTML‑шаблоны на Thymeleaf в
src/main/resources/templatesдля работы через браузер. - REST API: контроллеры в пакете
ru.dmitry.VegetableWarehouse.controllersпредоставляют REST‑ендпоинты. - Документация API (Swagger): интеграция со springfox-swagger2 для генерации документации по REST‑сервисам.
- Java 11 (компиляция под Java 8)
- Spring Boot 2.5.x
spring-boot-starter-webspring-boot-starter-data-jpaspring-boot-starter-thymeleaf
- PostgreSQL в качестве СУБД
- Liquibase для миграций базы данных
- Hibernate Validator для валидации
- MapStruct + Lombok для маппинга DTO ↔ сущности и сокращения шаблонного кода
- Springfox Swagger 2 / Swagger UI для документации API
- JUnit 5 и
spring-boot-starter-testдля модульного тестирования
- Установленный JDK 11+
- Установленный Maven 3.6+
- Доступ к базе PostgreSQL (локальный или удалённый)
По умолчанию приложение ожидает базу:
- URL:
jdbc:postgresql://localhost:5432/vegetable - Пользователь:
postgres - Пароль:
su
Эти параметры можно изменить в файле src/main/resources/application.yml.
-
Создайте в PostgreSQL базу данных, например:
CREATE DATABASE vegetable WITH ENCODING 'UTF8' TEMPLATE template0;
-
При необходимости измените:
spring.datasource.urlspring.datasource.usernamespring.datasource.password
в
src/main/resources/application.ymlпод свои настройки. -
Liquibase может быть включён/отключён через:
spring: liquibase: enabled: false # при true будут применяться changelog'и из db/changelog
Файлы миграций находятся в
src/main/resources/db/changelog.
Из корня проекта (там, где расположен pom.xml) выполните:
mvn clean packageПосле успешной сборки запустите приложение:
mvn spring-boot:runили
java -jar target/VegetableWarehouse-0.0.1-SNAPSHOT.jarПриложение по умолчанию стартует на порту 8080.
-
Веб‑интерфейс (Thymeleaf‑страницы):
- основные шаблоны расположены в
src/main/resources/templates(папкиbase-products,clients,employee,goods,products,purchase,sales,suppliers,units,warehouse).
- основные шаблоны расположены в
-
REST API:
- примеры ендпоинтов:
GET /baseProducts— получить список всех продуктов на складе;GET /baseProducts/{id}— получить продукт по идентификатору;POST /baseProducts— создать новый продукт;PUT /baseProducts/{id}— обновить продукт;DELETE /baseProducts/{id}— удалить продукт.
- примеры ендпоинтов:
-
Swagger UI:
- после запуска, как правило, доступен по адресу наподобие
http://localhost:8080/swagger-ui/илиhttp://localhost:8080/swagger-ui/index.html(конкретный URL зависит от версии springfox/Spring Boot; при необходимости проверьте в логах запуска).
- после запуска, как правило, доступен по адресу наподобие
src/main/java/ru/dmitry/VegetableWarehouseVegetableWarehouseApplication— точка входа в Spring Boot приложение и конфигурация Swagger.controllers— REST‑контроллеры для работы с сущностями (база продуктов, товары, клиенты, поставщики, сотрудники, закупки, продажи, типы складов, единицы измерения).model— JPA‑сущности (таблицы базы данных).dto— DTO‑классы для обмена данными.mappers— интерфейсы MapStruct для маппинга сущность ↔ DTO.repositories— Spring Data JPA репозитории.services— слой бизнес‑логики.doc— дополнительная документация API (например,ApiBaseProducts.yaml).
src/main/resourcesapplication.yml— конфигурация приложения и БД.templates— HTML‑шаблоны (Thymeleaf).db/changelog— Liquibase‑миграции.
Проект может использоваться как:
- учебный пример построения многослойного приложения на Spring Boot (controller → service → repository → DB);
- демо‑система для управления складом овощной продукции и примера построения REST API с документацией Swagger;
- основа для дальнейшего расширения функциональности (добавление авторизации, ролей, отчётов, интеграций и т.п.).
Общие сведения
Разработать приложение, через которое будет осуществляться работа с овощной базой.
Java 8+GitLiquibaseSwaggerMavenPostgreSQLElasticsearchJUnitSpringMVCLombok
- Управление складом овощной продукцией (добавление, поиск, обновление и удаление товара)
- Вывод имеющихся овощей со стоимостью по товарным группам.
- Покупка приход расход овощных позиций.
- Вывод информации о всём складском ассортименте.
- Приложение должно предоставлять Swagger API по работе со складом
- БД должна быть реплицирована, версионирование - Liquibase
- Покрытие тестами (SonarLint) не менее 60%
- Все интерфейсы сервисов должны поставляться с Javadoc
- Каждый этап должен быть покрыт тестами, Javadoc, Swagger
Репозиторий.Проект загружается в репозиторий на gitlab. В репозитории должны отсутствовать специфические для интегрированной среды разработки файлы, а также файлы собранного приложения. Необходимо придерживаться модели ветвления Gitflow. Каждую фиксацию изменений сопровождать понятным комментарием.Сборка проекта.Сборка проекта осуществляется через Maven. Описание процессов сборки и работы с приложением находится в README файле.
частьКаркас приложения. Сущности, таблицы БД (без репликации, но уже с Liquibase), CRUD, SwaggerчастьФункционал. Товар добавляется по накладным, убирается по покупке из склада, либо списывается. Добавляются товарные группы. Покупка представляет заказ с позициями. Списание представляет комбинированную операцию в 2 этапа. Сначала создается список на списание, далее этот список должен быть подтвержден отдельно.частьОтчеты. По проданным товарам. По списанным за период времени. По выручке склада. По среднему чеку склада. Репликация БД.частьПоиск. Реализовать поиск по неточному совпадению по наименованию товара. Поиск по вхождению в товарную группу.