# 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).
Шаги запуска
- Клонировать репозиторий:
git clone https://github.com/Vy4cheSlave/test-task-postgres.git
- Перейти в корневую директорию проекта:
cd test-task-postgres
- Запустить сервер:
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
- Используется стандартная библиотека net/http: Для выполнения задания есть все необходимое и других фреймворков я не изучал.
- Использоваласть библиотека swaggo/http-swagger/v2: Для построения UI для реализованного api. Является удобным инструментом для быстрого создания пользовательского взаимодействия.
- Использовалась библиотека jackc/pgx/v5: Библиотека разработанная специально для взаимодействия с базой данных postgress и очень хорошо оптимизированная под нее.
- Также было принято решение в обработке запроса по пути /bash/create-command сначала собрать все результаты выполнения комманд в слайс, а затем отправить на сервер один запрос, чтобы снизить нагрузку на бд.
- Использовалась библиотека pressly/goose/v3: Очень удобное средсто создания миграций, которое имеет множество достоинств:
- Версионирование с временной меткой
- Поднятие и откат миграций с помощью CLI инструмента
- Ошибки при неправильно примененной миграции
- В результате выполнения миграций сохраняется версия миграции, время ее применения, а также статус — была ли она применена.
- Для удобства создания юнит тестов использована библиотека golang/mock: позволяет автоматическм создавать фальшивые структуры соответсвующие интерфейсам, передовать ожидаемые результаты выполнения и заменять их во время тестирования.
# Constants
host=test-task-db.
No description provided by the author
No description provided by the author