Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание: Иерархия данных PLM

Описание задачи

Цель задания — разработать Spring Boot приложение, которое:

  1. Импортирует данные из CSV-файлов в PostgreSQL.
  2. Возвращает иерархию данных в формате JSON через REST API.
  3. Использует Docker для автоматизации развертывания.

Требования:

  • Данные из CSV (plm.csv, plmHierarchy.csv, Classes.csv) должны автоматически загружаться в БД.
  • Эндпоинт GET /plmData возвращает JSON с вложенными дочерними элементами в поле children.
  • Иерархия строится на основе связей из таблицы plmhierarchy.

Технологии

  • Java 21
  • Spring Boot
  • PostgreSQL
  • Flyway
  • Docker
  • Lombok

Краткий путь решения задания

  1. Импорт данных в PostgreSQL

    • Использован Flyway для автоматических миграций:
      • V1__create_tables.sql — создание таблиц.
      • V2__import_data.sql — загрузка данных из CSV.
    • Данные хранятся в таблицах: plm, plmhierarchy, classes.
  2. Построение иерархии

    • Реализована рекурсивная SQL-функция get_plm_hierarchy():
      • Использован рекурсивный CTE для обхода родительско-дочерних связей.
      • Результат преобразован в JSON с помощью json_agg и json_build_object.
  3. REST API

    • Контроллер PlmController обрабатывает GET-запросы на /plmData.
    • Сервис PlmService вызывает SQL-функцию и десериализует JSON в DTO (PlmNode).
  4. Docker-развертывание

    • Dockerfile — сборка приложения в образ Java.
    • docker-compose.yml — запуск PostgreSQL и приложения.
    • CSV-файлы монтируются в контейнер для импорта.
  5. Особенности

    • Обработка циклов через массив path в CTE.
    • Поле children отсутствует, если дочерних элементов нет.

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

1. Предварительные условия

  • Убедитесь, что CSV-файлы (plm.csv, plmHierarchy.csv, Classes.csv) находятся в папке csv в корне проекта.

2. Соберите и запустите контейнеры:

docker-compose up --build

3. Приложение будет доступно по адресу:

http://localhost:8080/plmData.


Пример ответа API

[
  {
    "objectId": 1,
    "name": "РС_Администратор",
    "oboznachenie": "",
    "className": "Рабочий стол",
    "children": [
      {
        "objectId": 2,
        "name": "Деталь01",
        "oboznachenie": "545344535",
        "className": "Деталь",
        "children": []
      },
      {
        "objectId": 3,
        "name": "Деталь02",
        "oboznachenie": "TopsBI-004-2024",
        "className": "Деталь",
        "children": [
          {
            "objectId": 4,
            "name": "Деталь02",
            "oboznachenie": "TopsBI-004-2024",
            "className": "Деталь",
            "children": []
          }
        ]
      }
    ]
  }
]

Возможные ошибки и решения

Ошибка импорта CSV

Убедитесь, что файлы находятся в папке csv, а пути в V2__import_data.sql корректны.

About

Test project for TopsBi

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages