Skip to content

brokensm1le/bash_api

Repository files navigation

bash_api

Задание

Условие задания можно посмотреть тут.

Решение

API

Полный API со всем функционалом можно посмотреть тут.

Запуск

В репозитории есть Makefile:

    make buildrun   // запуск приложения (забилдить и поднять БД + само приложение)
    make genMock    // сгенировать Mock (for test)
    make genSwagger // сгенерировать Swagger (api)
    make stop       // остановка приложения (остановить БД + само приложение)
    make test       // запуск тестов
Подключение к PostgrsQL(psql):
psql postgresql://root:root@localhost:5432/taskdb

Подробнее о реализации

Дизайн системы

Таблицы БД

Приложение имеет DB, в которой 3 таблицы:

- auth      // таблица, для авторизации пользователей(хранение логинов и захэшированных паролей)
- cmds      // таблица, для хранения bash-скртиптов
- results   // таблица, для хранения результатов запуска bash-скртиптов
Стэк
  • Для общения использовал web framework - Fiber.
  • Для SQL запросов использовал библиотеку SQLX.
  • Для Api использовал библиотеку Swagger.
  • Для авторизации и регистрации использовал JWT-token.

Звездочки

  • Добавить в API метод для остановки команды. Done ✅
  • Поддержка долгих команд (сохранять вывод команды в БД по мере ее выполнения, отображать вывод при получении одной команды). Done ✅
  • Можно добавить произвольный функционал, чтобы более полно показать свои навыки, но в таком случае обязательно его задокументировать. Done ✅

Тесты

Для тестов использовал два вида интеграционных тестов(Mock и FakeRealization): Мокаем repository и делаем самый обычный интегpационный тест:

  • SignIn пользоваетеля(Mock)
  • Берем content из БД (FakeRealization БД)
  • Проверяем что совпадает

Сделана проверка:

  • Для CreateCmd, GetCmd и DeleteCmd
  • Для RunCmd, GetRunResults
  • И разнообразные ошибки как и в cmd части, так и в run.

Подробнее.

Новый функционал

Добавил регистрацию и авторизацию пользователей, для AccessToken-a использовал JWT-token, а для RefreshToken-a генерировал рандомную строку. В JWT-token внутрь зашил роль клиента и его ID, так что при изменении роли нужно будет перелогиниваться(получить новый access). Чтобы изменить роль с обычного user на admin необходимо вызвать ручку /auth/beAdmin. Обработка access token-a находится в Middleware.

Сами ручки добавлены в API с тэгом auth.


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages