Skip to content

Dmitry-Chernikov/SimbirSoft_Vegetable_Warehouse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Овощебаза — система управления складом овощей

Приложение 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-web
    • spring-boot-starter-data-jpa
    • spring-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.

Настройка базы данных

  1. Создайте в PostgreSQL базу данных, например:

     CREATE DATABASE vegetable
         WITH ENCODING 'UTF8'
         TEMPLATE template0;
  2. При необходимости измените:

    • spring.datasource.url
    • spring.datasource.username
    • spring.datasource.password

    в src/main/resources/application.yml под свои настройки.

  3. 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/VegetableWarehouse
    • VegetableWarehouseApplication — точка входа в Spring Boot приложение и конфигурация Swagger.
    • controllers — REST‑контроллеры для работы с сущностями (база продуктов, товары, клиенты, поставщики, сотрудники, закупки, продажи, типы складов, единицы измерения).
    • model — JPA‑сущности (таблицы базы данных).
    • dto — DTO‑классы для обмена данными.
    • mappers — интерфейсы MapStruct для маппинга сущность ↔ DTO.
    • repositories — Spring Data JPA репозитории.
    • services — слой бизнес‑логики.
    • doc — дополнительная документация API (например, ApiBaseProducts.yaml).
  • src/main/resources
    • application.yml — конфигурация приложения и БД.
    • templates — HTML‑шаблоны (Thymeleaf).
    • db/changelog — Liquibase‑миграции.

Назначение проекта

Проект может использоваться как:

  • учебный пример построения многослойного приложения на Spring Boot (controller → service → repository → DB);
  • демо‑система для управления складом овощной продукции и примера построения REST API с документацией Swagger;
  • основа для дальнейшего расширения функциональности (добавление авторизации, ролей, отчётов, интеграций и т.п.).

Техническое задание

Общие сведения

Разработать приложение, через которое будет осуществляться работа с овощной базой.

  • Java 8+
  • Git
  • Liquibase
  • Swagger
  • Maven
  • PostgreSQL
  • Elasticsearch
  • JUnit
  • SpringMVC
  • Lombok

Функции приложения

  • Управление складом овощной продукцией (добавление, поиск, обновление и удаление товара)
  • Вывод имеющихся овощей со стоимостью по товарным группам.
  • Покупка приход расход овощных позиций.
  • Вывод информации о всём складском ассортименте.

Требования к реализации

  • Приложение должно предоставлять Swagger API по работе со складом
  • БД должна быть реплицирована, версионирование - Liquibase
  • Покрытие тестами (SonarLint) не менее 60%
  • Все интерфейсы сервисов должны поставляться с Javadoc
  • Каждый этап должен быть покрыт тестами, Javadoc, Swagger

Требования к поставке

  • Репозиторий. Проект загружается в репозиторий на gitlab. В репозитории должны отсутствовать специфические для интегрированной среды разработки файлы, а также файлы собранного приложения. Необходимо придерживаться модели ветвления Gitflow. Каждую фиксацию изменений сопровождать понятным комментарием.
  • Сборка проекта. Сборка проекта осуществляется через Maven. Описание процессов сборки и работы с приложением находится в README файле.

Этапы

  1. часть Каркас приложения. Сущности, таблицы БД (без репликации, но уже с Liquibase), CRUD, Swagger
  2. часть Функционал. Товар добавляется по накладным, убирается по покупке из склада, либо списывается. Добавляются товарные группы. Покупка представляет заказ с позициями. Списание представляет комбинированную операцию в 2 этапа. Сначала создается список на списание, далее этот список должен быть подтвержден отдельно.
  3. часть Отчеты. По проданным товарам. По списанным за период времени. По выручке склада. По среднему чеку склада. Репликация БД.
  4. часть Поиск. Реализовать поиск по неточному совпадению по наименованию товара. Поиск по вхождению в товарную группу.

About

Задание в рамках стажировки направлении Бэкенд (backend) компании SimbirSoft www.simbirsoft.com

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors