toimi-test-work

module
v0.0.0-...-d48638b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2022 License: MIT

README

Тестовое задание на позицию бэкенд-разработчика

Микросервис для подачи объявлений.

Задача:

Разработать сервис для подачи объявлений с сохранением в базе данных. Сервис должен предоставлять 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"
        ]
    }
]

Directories

Path Synopsis
cmd
app command
internal
app
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL