Skip to content

Japsty/Hezzl_test_task

Repository files navigation

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

REST сервис на Go,PostgreSQL,Redis,NATS,Clickhouse

Ссылка на задание тут

Содержание

  1. Запуск
  2. Доступные методы
  3. Документация
  4. Про реализацию Redis

Запуск

  docker-compose up

Доступные методы

У проекта есть описание методов в Postman

POST /good/create

Добавление новой записи в систему

В параметрах запроса должен передаваться projectId, параметр int должен быть больше 0. В теле запроса принимает такие параметры: name,description(опционально). Оба параметра string, размер больше 3х, но меньше 255.

Пример ниже показывает принимаемую на вход и выходящую структуры

Входящая структура

{
    "name": "chipi",
    "description": "chapachapa"
}

Выходящая структура

{
    "id": 1,
    "projectId": 1,
    "name": "chipi",
    "description": "chapachapa",
    "priority": 1,
    "createdAt": "2024-03-02T10:24:51.729329Z"
}

PATCH /good/update

Обновление полей структуры

В параметрах запроса должны передаваться параметры id,projectId. Параметры int являются обязательными и должны быть больше 0. В теле запроса принимает такие параметры: name,description(опционально). Оба параметра string, размер больше 3х, но меньше 255.

Пример ниже показывает принимаемую на вход и выходящую структуры

Входящая структура

{
    "name":"chapa",
    "description":"chipa"
}

Выходящая структура

{
    "id": 1,
    "projectId": 1,
    "name": "chapa",
    "description": "chipa",
    "priority": 1,
    "createdAt": "2024-03-02T10:24:51.729329Z"
}

PATCH good/reprioritiize

Обновление полей priorities

В параметрах запроса должны передоваться параметры id,projectId. Параметры int являются обязательными и должны быть больше 0. В теле запроса принимает параметр: newPriority. Параметр int должен быть больше 0.

Пример ниже показывает принимаемую на вход и выходящую структуры

Входящая структура

{
    "newPriority": 2
}

Выходящая структура

{
    "priorities": [
        {
            "id": 2,
            "priority": 2
        },
        {
            "id": 3,
            "priority": 3
        },
        {
            "id": 4,
            "priority": 4
        }
    ]
}

DELETE /good/remove

Удаление записи

В параметрах запроса должны передоваться параметры id,projectId. Параметры int типа, являются обязательными и должны быть больше 0.

Пример ниже показывает выходящую структуру

Возвращаемая структура

{
    "id": 1,
    "campaignId": 1,
    "removed": true
}

GET /goods/list

Вывод некоторого количества записей

В параметрах запроса должны передоваться параметры limit,offset. Параметры int типа, не являются обязательными. Limit должен быть больше 0, по стандарту значение 10. Offset должен быть больше или равень 0, по стандарту знаяение 1.

Пример ниже показывает возвращаемую структуру

Возвращаемая структура

{
    "meta": {
        "total": 2,
        "removed": 1,
        "limit": 10,
        "offset": 0
    },
    "goods": [
        {
            "id": 1,
            "projectId": 1,
            "name": "chapa",
            "description": "chipa",
            "priority": 2,
            "removed": true,
            "createdAt": "2024-03-02T20:24:51.729329Z"
        },
        {
            "id": 2,
            "projectId": 1,
            "name": "chipi",
            "description": "chapachapa",
            "priority": 2,
            "createdAt": "2024-03-02T20:40:31.03532Z"
       },
    ]
}

Документация

Внутри проекта в директории /docs лежит swagger документация

Про реализацию Redis

Я понимаю, что данное решение совсем плохое, но я не смог понять каким образом мне реализовать инвалидацию не имея доступа к полям limit и offset при этом не совершая сохранение построчно, что накладно т.к. у нас будет огромное количество запросов в реляционную бд. Буду рад получить ответ в фидбеке на то, как лучше это было бы реализовать.

About

Go,PostgreSQL,Redis,NATS,Clickhouse

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published