An open API service indexing awesome lists of open source software.

https://github.com/antonskachko/digitalchieftest

Тестовое задание для компании Digital Chief
https://github.com/antonskachko/digitalchieftest

java jpa liquibase mapstruct maven postgresql spring-boot web

Last synced: 3 months ago
JSON representation

Тестовое задание для компании Digital Chief

Awesome Lists containing this project

README

          

# Digital Chief тестовое задание

### Бизнес модель продукта

Разработать backend-приложения для управления компанией и её сотрудниками.
В системе будут две основные сущности: Компания и Сотрудники. Каждая компания имеет несколько сотрудников
(отношение "один ко многим")

### Сущности продукта
* Компания:
* Id (id) - уникальный идентификатор компании;
* Название (name) - название компании;
* Адрес (address) - адрес компании;
* Год основания (yearOfEstablishment) - год основания компании;
* Отрасль (industry) - отрасль, в которой работает компания.
* Сотрудники:
* Id (id) - уникальный идентификатор сотрудника;
* Имя (Name) - полное имя сотрудника;
* Должность (Position) - должность сотрудника;
* Зарплата (Salary) - зарплата сотрудника;
* Компания (Company) - ссылка на идентификатор компании (внешний ключ).

### API Методы
1. Компания:
* Создание компании (Create Company):
* Метод: POST
* URL: /companies
* Входные данные: JSON-объект с полями name, address, year_of_establishment, industry.
* Выходные данные: JSON-объект с данными созданной компании.
* Получение списка компаний (Get Companies)
* Метод: GET
* URL: /companies
* Входные данные: нет.
* Выходные данные: JSON-массив с объектами компаний.
* Получение компании по ID (Get Company by ID)
* Метод: GET
* URL: /companies/{id}
* Входные данные: идентификатор компании в URL.
* Выходные данные: JSON-объект с данными компании.
* Обновление данных компании (Update Company)
* Метод: PUT
* URL: /companies/{id}
* Входные данные: идентификатор компании в URL и JSON-объект с обновляемыми данными.
* Выходные данные: JSON-объект с обновленными данными компании.
* Удаление компании (Delete Company)
* Метод: DELETE
* URL: /companies/{id}
* Входные данные: идентификатор компании в URL.
* Выходные данные: статус операции.
2. Сотрудник
* Создание сотрудника (Create Employee)
* Метод: POST
* URL: /employees
* Входные данные: JSON-объект с полями name, position, salary, hire_date, company_id.
* Выходные данные: JSON-объект с данными созданного сотрудника.
* Получение списка сотрудников (Get Employees)
* Метод: GET
* URL: /employees
* Входные данные: нет.
* Выходные данные: JSON-массив с объектами сотрудников.
* Получение сотрудника по ID (Get Employee by ID)
* Метод: GET
* URL: /employees/{id}
* Входные данные: идентификатор сотрудника в URL.
* Выходные данные: JSON-объект с данными сотрудника.
* Обновление данных сотрудника (Update Employee)
* Метод: PUT
* URL: /employees/{id}
* Входные данные: идентификатор сотрудника в URL и JSON-объект с обновляемыми данными.
* Выходные данные: JSON-объект с обновленными данными сотрудника.
* Удаление сотрудника (Delete Employee)
* Метод: DELETE
* URL: /employees/{id}
* Входные данные: идентификатор сотрудника в URL.
* Выходные данные: статус операции.

### Зависимости
1. Java 17 - Язык на котором я писал код.
2. Spring boot - Фреймворк для создания автономных, производственных приложений на Java с минимальными усилиями. Он упрощает настройку и разработку приложений благодаря встроенным настройкам по умолчанию.
3. Spring data jpa - Подмножество Spring Data, которое предоставляет абстракцию для работы с JPA (Java Persistence API), упрощая взаимодействие с базой данных и управление сущностями.
4. Liquibase - Инструмент для управления изменениями базы данных. Позволяет отслеживать, версионировать и развертывать изменения в базе данных, обеспечивая согласованность и контроль версий.
5. DevTools - Набор инструментов для разработки в Spring Boot, который включает автоматическую перезагрузку приложения при изменениях кода, улучшая производительность разработки.
6. Postgresql - Мощная объектно-реляционная система управления базами данных (СУБД), используемая для хранения и управления данными приложения.
7. Lombok - Библиотека, которая упрощает код Java, автоматизируя создание стандартных методов, таких как геттеры, сеттеры, конструкторы и т.д., с помощью аннотаций.
8. Spring test - Набор инструментов и библиотек для тестирования Spring-приложений. Обеспечивает тестирование компонентов в изоляции и интеграционные тесты.
9. Validation - Библиотека для проверки данных и объектов, предоставляющая аннотации для валидации полей сущностей, таких как @NotNull, @Size и т.д., обеспечивая целостность и корректность данных.
10. Mapstruct - Инструмент для создания мапперов (конвертеров) между POJO-объектами (Plain Old Java Objects) с помощью аннотаций, что упрощает преобразование данных между различными слоями приложения.

### Очерёдность запуска
1. Склонируйте гит репозиторий (git clone https://github.com/AntonSkachko/DigitalChiefTest)
2. Запустите Docker Desktop (если вы на Windows)
3. Запустите [docker-compose.yml](docker-compose.yml), либо через терминал в intellij (или другую ide) (docker compose up), либо через обычный терминал, только нужно будет дополнительно прописать путь к docker-compose.yml файлу.
4. Запустите приложение через intellij (или другую ide), либо зайдите в корневую папку и пропишите команду ```mvn spring-boot:run```

### Коллекция запросов через postman
Ссылка на [коллекцию запросов](TestCompany.postman_collection.json) в Postman