Categorygithub.com/Vy4cheSlave/test-task-postgres
repositorypackage
0.0.0-20240902100124-4647eb524627
Repository: https://github.com/vy4cheslave/test-task-postgres.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

terminal-emulator

Документация описывает REST API, обрабатывающий следующие запросы: создание команд, просмотр всех комманд, просмотр одной комманды по id. Команды пишутся как bash-скрипт. Все команды запускаются параллельно.

Требования

  • Язык программирования: Golang
  • Библиотеки: Сторонние [github.com/golang/mock, github.com/jackc/pgx/v5, github.com/pressly/goose/v3, github.com/swaggo/http-swagger/v2, github.com/swaggo/swag]
  • Docker, docker-compose
  • Операционная система: MacOS или Linux(Fedora 40: Silverblue).

Шаги запуска

  1. Клонировать репозиторий:
git clone https://github.com/Vy4cheSlave/test-task-postgres.git
  1. Перейти в корневую директорию проекта:
cd test-task-postgres
  1. Запустить сервер:
sudo docker-compose up

URL

URL конечных путей - http://0.0.0.0:8000/bash/.

Swagger UI

Swagger URL - http://localhost:8080/swagger/.

Возникновение ошибок при обработке запросов

  • HTTPCode: Код состояния HTTP, который будет возвращен в ответе.

API

Создание Bash скриптов

  • URL: /bash/create-command
  • Метод: POST
  • Тело запроса:
  • application/json: "{"bash_strings": ["bash command"]}"
  • Ответ:
  • Возвращает application/json, в котором содержатся: команды, флаги выполнения с ошибкой, результаты выполнения комманд, и код 200.
  • Возвращает код ошибки 500 [и результат если команды были выполнены успешно].

Список всех выполненных комманд

  • URL: /bash/get-commands
  • Метод: GET
  • Ответ:
  • Возвращает application/json, в котором содержатся список: id, команд, флагов выполнения с ошибкой, результатов выполнения комманд, и код 200.
  • Возвращает возвращает код ошибки 500.

Получение комманды по ее id

  • URL: /bash/get-commands/{id}
  • Метод: GET
  • Значение id соответствует sql типу SERIAL (целочисленная положительная цифра)
  • Ответ:
  • Возвращает application/json, в котором содержится: id, команды, флаго выполнения с ошибкой, результат выполнения комманды, и код 200.
  • Возвращает возвращает код ошибки 500.

Unit тесты реализованные для handlers/ и bash/

Для запуска тестов необходимо запустить тесты, используя комманду:

go test -v ./...

ADR

  1. Используется стандартная библиотека net/http: Для выполнения задания есть все необходимое и других фреймворков я не изучал.
  2. Использоваласть библиотека swaggo/http-swagger/v2: Для построения UI для реализованного api. Является удобным инструментом для быстрого создания пользовательского взаимодействия.
  3. Использовалась библиотека jackc/pgx/v5: Библиотека разработанная специально для взаимодействия с базой данных postgress и очень хорошо оптимизированная под нее.
  • Также было принято решение в обработке запроса по пути /bash/create-command сначала собрать все результаты выполнения комманд в слайс, а затем отправить на сервер один запрос, чтобы снизить нагрузку на бд.
  1. Использовалась библиотека pressly/goose/v3: Очень удобное средсто создания миграций, которое имеет множество достоинств:
  • Версионирование с временной меткой
  • Поднятие и откат миграций с помощью CLI инструмента
  • Ошибки при неправильно примененной миграции
  • В результате выполнения миграций сохраняется версия миграции, время ее применения, а также статус — была ли она применена.
  1. Для удобства создания юнит тестов использована библиотека golang/mock: позволяет автоматическм создавать фальшивые структуры соответсвующие интерфейсам, передовать ожидаемые результаты выполнения и заменять их во время тестирования.