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

# 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: позволяет автоматическм создавать фальшивые структуры соответсвующие интерфейсам, передовать ожидаемые результаты выполнения и заменять их во время тестирования.

# Packages

No description provided by the author
No description provided by the author
Package docs Code generated by swaggo/swag.
No description provided by the author
No description provided by the author

# Constants

host=test-task-db.
No description provided by the author
No description provided by the author