Для запуска нам потребуется контейнер с postgresql и контейнер приложения:
docker run -d -p 5432:5432 --name veeroute-postgres -e POSTGRES_PASSWORD=mysecretpassword --env="POSTGRES_DB=veeroute" postgres
docker run -dp 8080:8080 --link veeroute-postgres:pgsql knastnt/veetest
Можно открывать в http://localhost:8080/employees
База данных пуста.
Задание:
Необходимо реализовать микросервис - rest api для CRUD приложения , которое
возвращает список всех сотрудников в базе (с пагинацией по n сотрудников). С
возможностью их удаления, редактирования, добавления новых.
У вас есть всего 1 таблица employees. В ней хранится список
сотрудников(например,сотрудники какого-то предприятия).Сотрудников можно
добавлять (create), получать данные(read), изменять данные о сотруднике
(update), удалять(delete).
Данные, которые должны быть в таблице:
● id –идентификатор сотрудника;
● first_name –Имя сотрудника
● last_name – фамилия сотрудника
● middle_name - отчество сотрудника
● date_of_birth –дата рождения;
● date_added - дата добаления сотрудника
● date_updated -дата обновления данных сотрудника
● account_number - номер счета
● is_deleted – true- сотрудник был удален, false- сотрудник не удален
API:
1) Запрос на получение данных всего списка неудаленных сотрудников
(+реализовать пагинацию)
2) Запрос на получения сотрудника по id
3) Запрос на обновление информации о сотруднике по id
4) Запрос на удаление сотрудника по id (в базе поменять флажок is_deleted)
5) Запрос на добавление сотрудника
Тип формата сообщений:json
Требования:
• Java 8-11
• Spring/Springboot.
• PostgreSQL/Redis
• Maven/Gradle
Покройте ваше приложение автотестами(JUnit/Mockito) и упакуйте микросервис в
docker, тестовую базу тоже можете поместить в docker, не забудьте сопроводить
ваше приложение инструкцией по запуску и описания входных и выходных
пакетов.
Приложение создано на стеке Java 11, Maven, Spring Boot, Spring Web, Spring Data JPA (Hibernate), PostgreSQL, JUnit.
Приложение запускается на 8080 порту.
Для работы с приложения необходим доступ к БД:
Создание структуры происходит автоматически при запуске приложения.
При запуске тестов - содержимое таблицы уничтожается и заполняется тестовыми данными.
GET /employees возвращает список всех работников на одной странице
GET /employees?page=2 возвращает список работников постранично. В параметре page указывается номер страницы, начиная с 1. Количество работников на одной странице устанавливается свойством app.rest.employee.count-on-page в файле application.properties и сейчас равно 2.
GET /employees/{ID} возвращает работника по его id, и код 404 если таковой отсутствует
POST /employees создает нового работника, принимая данные в формате JSON. Валидация параметров не производится, обязательных полей нет. Возвращает созданного работника с присвоенными id, датой создания и датой изменения, отметкой isDeleted. Пример json:
{
"firstName": "Геннадий",
"lastName": "Поляков",
"middleName": "Юрьевич",
"dateOfBirth": "2001-05-26 15:00:05",
"accountNumber": 31556,
"deleted": false
}
PUT /employees/{id} редактирует выбранного работника, принимая данные в формате JSON. Валидация параметров не производится, обязательных полей нет. Ничего не возвращается. При редактировании обнавляется поле с датой обновления. Если id в адресе не совпадает и id в JSON, будет возвращен код 400. Пример json:
{
"id":4,
"firstName": "Геннадий",
"lastName": "Поляков",
"middleName": "Юрьевич",
"dateOfBirth": "2001-05-25 23:00:05",
"accountNumber": 31556,
"deleted": false
}
DELETE /employees/{id} удаляет выбранного работника, изменяя флаг isDeleted. Возвращает 404 в случае отсутствия удаляемого работника.
- Отсутствие валидации входных данных
- Отсутствие набора обязательных полей
- Недостаточно подробная обработка ошибок и логика формирования исключений.
- Отсутствие разделения БД для тестов с рабочей БД
Создание контейнера
docker run -d -p 5432:5432 --name veeroute-postgres -e POSTGRES_PASSWORD=mysecretpassword --env="POSTGRES_DB=veeroute" postgres
mvn -Dmaven.test.skip=true package
docker build -t veetest .
docker run -t --link veeroute-postgres:pgsql -p 8080:8080 veetest
- Konstantin Zubrilin | HH.ru | 456kot@mail.ru