Условие задания можно посмотреть тут.
Полный API со всем функционалом можно посмотреть тут.
В репозитории есть Makefile:
make buildrun // запуск приложения (забилдить и поднять БД + само приложение)
make genMock // сгенировать Mock (for test)
make genSwagger // сгенерировать Swagger (api)
make stop // остановка приложения (остановить БД + само приложение)
make test // запуск тестов
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
.