Skip to content

Andrew-Savin-msk/tarant-kv

Repository files navigation

tarant-kv (KV-Store API на базе Tarantool)

Этот проект реализует API для KV-хранилища с использованием Tarantool в качестве базы данных. API предназначен для выполнения операций аутентификации пользователей, записи и чтения данных пачками с поддержкой параллельной обработки для повышения производительности.

Функциональные возможности

  • Аутентификация пользователей: Безопасная авторизация с получением токена.
  • Авторизация пользователей: Все запросы к API (кроме /api/login) требуют валидный токен, передаваемый в заголовке Authorization.
  • Операции с данными пачками: Поддержка пакетных операций записи и чтения пар ключ-значение.
  • Обработка ошибок: Корректная обработка некорректных запросов и ошибок базы данных.

Эндпоинты

1. Вход в систему (Login)

Эндпоинт: POST /api/login

Описание: Аутентифицирует пользователя и возвращает токен авторизации.

Пример запроса:

{
    "username": "your_username",
    "password": "your_password"
}

Пример ответа:

  • 200 OK: Отсутствуют или некорректные учетные данные.
{
    "token": "your_generated_token"
}
  • 400 Bad Request: Отсутствуют или некорректные учетные данные.
{"error":"invalid email or password"}
  • 500 Internal Server Error: Неверное имя пользователя или пароль.
{"error":"valid ending of operation is unable"}

2. Запись данных пачками

Эндпоинт: POST /api/write

Описание: Записывает пачку пар ключ-значение в базу данных.

Пример запроса:

{
    "data": {
        "key1": "value1",
        "key2": "value2",
        "key3": 1
    }
}

Пример ответа:

  • 200 OK: Отсутствуют или некорректные учетные данные.
{
    "status": "success"
}

Или если часть ключей не удалось вставить.

{
    "status": "partially_inserded",
    "not_inserted": [
        "key3",
        "key1",
        "key2"
    ]
}

Коды ошибок:

  • 400 Bad Request: Некорректный формат данных.
{"error":"<внутренняя_ошибка_парсера_json>"}
  • 401 Unauthorized: Неверный или отсутствующий токен.
{"error":"missing authorization token"/"invalid acess token"/"user is not auntificated"/"invalid email or password"}
  • 500 Internal Server Error: Ошибка базы данных.
{"error":"valid ending of operation is unable"}

3. Чтение данных пачками

Эндпоинт: POST /api/read

Описание: Считывает пачку пар ключ-значение из базы данных.

Пример запроса:

{
    "keys": ["key1", "key2", "key3"]
}

Пример ответа:

  • 200 OK: Отсутствуют или некорректные учетные данные.
{
    "data": {
        "key1": "value1",
        "key2": "value2",
        "key3": 1
    }
}

Или если части ключей нет, то сервис возвращает как найденные так и неайденные.

{
    "data": {},
    "not_found": [
        "key3",
        "key1",
        "key2"
    ]
}

Коды ошибок:

  • 400 Bad Request: Отсутствуют или некорректные ключи.
{"error":"<внутренняя_ошибка_парсера_json>"}
  • 401 Unauthorized: Неверный или отсутствующий токен.
{"error":"missing authorization token"/"invalid acess token"/"user is not auntificated"/"invalid email or password"}
  • 500 Internal Server Error: Неверное имя пользователя или пароль.
{"error":"valid ending of operation is unable"}

Инструкция по запуску

  1. Клонирование репозитория:

    git clone https://github.com/yourusername/tarant-kv.git
    cd tarant-kv
  2. Настройка окружения:

    • Убедитесь, что на вашем компьютере установлены Docker и Docker Compose.
    • Объявите переменную окружения
    • CONFIG_PATH_DOCKER=<путь_до_конфигурационного_файла>
      
    • Создайте конфигурационный файл по указанному ранее пути с данной структурой
      [server]
          port = ":<порт_сервера>"
          log_level = "<уровень_логирования>(debug/info/error)"
          session_key = "<секретный_ключ_jwt>"
          token_ttl = "<время_истечения_токена>"
      
      [value_database]
          host = "<имя_хоста_базы_данных_значений>"
          port = ":<порт_базы_данных_значений>"
      
      [user_database]
          def_user="<имя_первого_пользователя>(место для вставки пользователя из технического задания)"
          def_passwd="<пароль_первого_пользователя>(место для вставки пароля пользователя из технического задания)"
          host = "<имя_хоста_базы_данных_пользователей>"
          port = ":<порт_базы_данных_пользователей>"
  3. Запуск приложения:

    docker-compose up -d

    Эта команда запустит как Tarantool'ы, так и API сервис в контейнерах Docker.

  4. Доступ к API: API будет доступен по адресу http://localhost:8081.

Тестирование

Интеграционные тесты для всех эндпоинтов API находятся в каталоге tests/. Для запуска тестов выполните:

  • Замениет путь на путь до конфигурационного файла для тетов (с тестовыми бд)
CONFIG_PATH_DOCKER=<путь_до_конфигурационного_файла>
  • Создайте в папке tests/endpoint_test/ по такому же пути что вы указали в CONFIG_PATH_DOCKER, абсолютно такой же файл что и в конфигурации
  • Запустите docker-compose вот таким образом:
docker-compose exec api go test ./tests/...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published