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
- Host: GitHub
- URL: https://github.com/antonskachko/digitalchieftest
- Owner: AntonSkachko
- Created: 2024-07-16T22:31:13.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-17T16:48:12.000Z (almost 2 years ago)
- Last Synced: 2025-03-21T15:40:51.304Z (over 1 year ago)
- Topics: java, jpa, liquibase, mapstruct, maven, postgresql, spring-boot, web
- Language: Java
- Homepage:
- Size: 22.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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