Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/himmel520/pgpro


https://github.com/himmel520/pgpro

Last synced: 6 days ago
JSON representation

Awesome Lists containing this project

README

        

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

## Запуск
```shell
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
| Поле | Тип | Обязательность | Значение по умолчанию |
|-------------------|------------------|------------------|------------------|
| id | UUID | PRIMARY KEY |gen_random_uuid() |
| name | VARCHAR(64) | NOT NULL | |
| description | TEXT | | |
| script | TEXT | NOT NULL | |

Таблица: commands_info
| Поле | Тип | Обязательность | Значение по умолчанию |
|-------------------|------------------|------------------|------------------|
| id | UUID | PRIMARY KEY | gen_random_uuid() |
| commands_id | UUID | REFERENCES commands(id) | |
| start_time | TIMESTAMP | NOT NULL | CURRENT_TIMESTAMP |
| end_time | TIMESTAMP | | NULL |
| exitcode | INTEGER | | 0 |
| output | TEXT | | '' |