/ads_storage_api

Тестовое задание avito

Primary LanguageGo

Contents ads_storage_api

Prepare

Create .env file in root directory and add following values:

SERVER_PORT=8080
MARIA_USER=root
MARIA_PASSWORD=secret
MARIA_HOST=db_domain
MARIA_PORT=3306
MARIA_DB=database

CMD

Run

go run app/main.go

Run tests

go test -v

⬆ Back to Top

Docker-compose

docker-compose up -d --build

⬆ Back to Top

API Documentation

GET api/ads/all

Метод получения списка объявлений. На одной странице присутствует 10 объявлений. Возможна сортировка по цене (возрастание/убывание) и по дате создания (возрастание/убывание). Поля в ответе: название объявления, ссылка на главное фото (первое в списке), цена.

Parameters

Name Description
page *required Номер страницы (номер объявления + 10 штук)
sort_by По какому критерию сортировать price/data (по умолчанию price)
order 0 - по убыванию, 1 - по возрастанию (по умолчанию 1)

Example

Valid

curl http://localhost:8080/api/ayds/all?page=0&sort_by=price&order=1

Invalid

curl http://localhost:8080/api/ayds/all?page=0&sort_by=price&order=2

Response

Status Response
200 Запрос успешно обработан
Example Value:
{
    "ok": true,
    "response": [
        {
            "id": 1,
            "title": "title0",
            "main_image": "ref0",
            "price": 0
        },
        {
            "id": 2,
            "title": "title1",
            "main_image": "ref3",
            "price": 1
        },
        {
            "id": 3,
            "title": "title2",
            "main_image": "ref5",
            "price": 2.13
        }
    ]
}
400 Ошибка запроса
Example Value:
{
    "ok": false,
    "error_code": 400,
    "description": "Invalid order param"
}

⬆ Back to Top

GET api/ads/get

Метод получения конкретного объявления. Принимает существующий ID объявления. Возвращает ID брони.

Parameters

Name Description
id *required Cуществующий ID объявления
fields Опциональные поля: description, images

Example

curl http://localhost:8080/api/ads/get?id=1&fields=description

Response

Status Response
200 Запрос успешно обработан
Example Value:
{
    "ok": true,
    "response": {
        "id": 1,
        "title": "title0",
        "description": "desc0",
        "price": 0
    }
}
400 Ошибка запроса
Example Value:
{
    "status": false,
    "description": "ID not Found"
}

⬆ Back to Top

POST api/ads/create

Метод создания объявления. Принимает на вход название, описание, несколько ссылок на фотографии(до трех ссылок), цена. Возвращает ID созданного объявления и код результата (ошибка или успех).

Parameters

Name Description
title *required Название объявления
description Описание объявления
images *required Ссылки на картинки
price *required Цена

Example

curl -X POST -d "title=title1" -d "images=ref1,ref2" -d "price=100.01" http://localhost:8080/api/ads/create

Response

Status Response
200 Запрос успешно обработан
Example Value:
{
    "ok": true,
    "response": 1
}
400 Ошибка запроса
Example Value:
{
    "ok": false,
    "error_code": 400,
    "description": "Title not Found"
}

⬆ Back to Top

Program architecture scheme

Классы, отмеченные символами <I>, — interface; отмеченные символами <DS> — data structure. Простые стрелки соответствуют отношениям использования. Стрелки с треугольным наконечником соответствуют отношениям реализации ⬆ Back to Top

Database scheme

⬆ Back to Top