/truckapi

RESTful API для управления списком грузовиков.

Primary LanguageKotlin

Тестовое задание и его эталонное решение на позицию «Backend разработчик (Spring\Java\Kotlin)»

Разработать RESTful сервис, который позволит управлять списком грузовиков. Должна быть возможность выполнения crud-операций над данными. Данные должны храниться в базе данных PostgreSQL.

Описание модели данных.
Сущность «Грузовик» должна иметь следующие атрибуты:
    • id — уникальный идентификатор, тип Long
    • name — название грузовика, тип String
    • price — цена, тип Float
    • comment — текстовый комментарий, тип String

Описание представления данных.
{
  "id": 9472,
  "name": "Kamaz",
  "price": 75950.50,
  "comment": "Best truck"
}

Требуется реализовать следующие конечные точки RESTful API:
GET /trucks — получить список всех грузовиков сохраненных на сервере.
GET /trucks/{id} — получить грузовик по id.
POST /trucks — добавить новый грузовик на сервер. Сущность передается в теле запроса.
PUT /trucks/{id} — обновить данные о грузовике на сервере. ВСЕ данные грузовика передаются в теле.
DELETE /trucks/{id} — удалить грузовик на сервере по id.
DELETE /trucks — удалить все грузовики на сервере.

В ответах на ВСЕ запросы, должны быть правильные коды состояний http.

Требования к реализации.
Стек:
    • Spring Boot версии не ниже 2.1.6
    • PostrgeSQL версии не ниже 10.3
    • Docker Compose
    • Java или openjdk версии не ниже 8
    • Языки: Java или Kotlin на выбор
Развертывание:
RESTful сервис будет развертываться в тестовом окружении на хостовой операционной системе ubuntu server 16.04 в среде Docker Compose. Приложение сервера и СУБД должны находится в разны docker-контейнерах (мульти-контейнерное приложение docker compose). Сервер должен отвечать на запросы к localhost:8080 . Сервис должен для запуска требовать ТОЛЬКО ОДНУ команду в терминале (никаких sh-скриптов): docker-compose up

Критерии оценки:
Понимание разработки rest-сервисов на Spring Boot, понимание лучших практик разработки RESTful API, применение паттернов проектирования, применение асинхронности\многопоточности.