Тестовое задание на позицию бэкенд-разработчика
Микросервис для подачи объявлений.
Задача:
Разработать сервис для подачи объявлений с сохранением в базе данных. Сервис должен предоставлять API, работающее поверх HTTP в формате JSON.
Подробнее тестовое задание описано тут.
Решение:
За 4 часа была реализована большая часть функционала сервиса кроме работы с опциональными полями в методе получения конкретного объявления. СУБД Postgres.
В методе получения списка объявлений сортировка происходит в начале по цене, потом по дате создания т.е. для объявлений с одинаковой ценой сортировка будет происходить по дате создания.
Метод получения конкретного объявления возвращает структуру, в которой ссылка на главное фото хранится в массиве. Мотивация сохранить общность API для случая с опциональными полями (ссылки на все фото).
Развёртывание:
Запуск сервера и СУБД:
make run
Остановка сервера и СУБД, удаление контейнеров и сети:
make down
Примеры работы API:
Создать объявление
curl POST -v -d "{
\"name\": \"Ноутбук М5\",
\"description\": \"Новый ноутбук.\",
\"price\": 29999.99,
\"urls\":
[\"photo.ru/photo/1\", \"photo.ru/photo/2\", \"photo.ru/photo/3\"]
}" http://0.0.0.0:8080/v1/advert/
"data": 1
Получить объявление по ID
curl -X GET "http://0.0.0.0:8080/v1/advert/1"
"data": {
"name": "Ноутбук М5",
"price": 29999.99,
"urls": [
"photo.ru/photo/1"
]
}
Получить первые 10 объявлений с сортировкой цены по убыванию и дате создания по возрастанию
curl -X GET "http://0.0.0.0:8080/v1/advert/page/?num=0&price=true&created=false"
"data": [
{
"name": "Ноутбук М5 ultra",
"price": 45500,
"urls": [
"photo.ru/photo/1"
]
},
{
"name": "Ноутбук М5",
"price": 29999.99,
"urls": [
"photo.ru/photo/1"
]
},
...
{
"name": "Ноутбук М5w",
"price": 12500,
"urls": [
"photo.ru/photo/1"
]
}
]