Categorygithub.com/himmel520/pgPro
repository
0.0.0-20240821185348-49bc5083091e
Repository: https://github.com/himmel520/pgpro.git
Documentation: pkg.go.dev

# Packages

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

# README

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

Запуск

docker compose build
docker compose up

Выполнено

  • Базовый функционал
  • Поддержка долгих команд
  • Сборка приложения (Dockerfile, compose.yml)

Произвольный функционал

  • Swagger docs: http://localhost:8000/swagger/index.html
  • Валидация id(uuid)
  • Новые endpoints:
    • Обновление команды по id
    • Получение информации о выполнении команды по ее id
    • Удаление команды и связанной с ней информации по id

Архитектура приложения:

Handlers Layer: Обрабатывает все запросы к API, соответствующие различным маршрутам.

  • Проверка доступности сервера: GET /api/v1/ping
  • Получение списка всех команд: GET /api/v1/commands/
  • Получение информации о команде по её id: GET /api/v1/commands/:id
  • Получение вывода выполнения команды по её id: GET /api/v1/commands/:id/info
  • Создание новой команды: POST /api/v1/commands/
  • Удаление команды и связанной с ней информации по её id: DELETE /api/v1/commands/:id
  • Остановка выполнения команды по её id: POST /api/v1/commands/:id/stop
  • Обновление информации о команде по её id: PUT /api/v1/commands/:id

Service Layer: Включает в себя репозиторий для работы с базой данных и исполнитель для запуска команд.

  • Runner: Отвечает за запуск и управление выполнением команд. Создаёт новый процесс для выполнения команды. Позволяет добавлять новые команды, запускать их, останавливать, а также получать вывод выполнения и статус завершения команды.

Repository Layer: Отвечает за взаимодействие с базой данных.

Postgres

Таблица: commands

ПолеТипОбязательностьЗначение по умолчанию
idUUIDPRIMARY KEYgen_random_uuid()
nameVARCHAR(64)NOT NULL
descriptionTEXT
scriptTEXTNOT NULL

Таблица: commands_info

ПолеТипОбязательностьЗначение по умолчанию
idUUIDPRIMARY KEYgen_random_uuid()
commands_idUUIDREFERENCES commands(id)
start_timeTIMESTAMPNOT NULLCURRENT_TIMESTAMP
end_timeTIMESTAMPNULL
exitcodeINTEGER0
outputTEXT''