Для запуска сервиса нужен установленный docker, тогда достаточно выполнить следующую команду:
-
Установите Docker и Docker Compose (если не установлены)
-
Клонируйте репозиторий
git clone https://github.com/garaevmir/AvitoCoinStore.git- Перейдите в директорию проекта
cd avito-coin-store- Запустите сервис
docker-compose up --buildПосле запуска контейнера, сервер будет доступен в localhost:8080
Язык сервиса: Go
База данных: PostgreSQL
Контейнеризация: Docker + Docker Compose
Линтер: golangci-lint
Аутентификация: JWT (секрет в .env)
-
Сервис соответствует API
-
После первой и последующих авторизаций генерируется и выдаётся личный JWT токен для пользователя. Для генерации используется скрытый от внешнего наблюдателя
user_idи секретное слово объявленное в файле .env -
Написаны юнит тесты для хендлеров и функций взаимодействующих с базой данных (подробнее в отдельной папке tests)
-
Написано интеграционное тестирование для разных сценариев работы (см. tests)
-
Проведено нагрузочное тестирование (см. tests)
-
Конфигурацию линтера можно посмотреть в файле .golangci.yaml
-
Большинство функций имеют краткое описание того что они делают и для чего нужны
-
Вообще по-хорошему файл .env не должен быть запушен и более того, .env файл отдельно перечислен в .gitignore, однако я решил, что лучше будет если он будет доступен сразу после клонирования в репозиторий. Тем более что там не лежит ничего ценного.
-
Для тестирования отдельных частей кода приходилось делать специальные интерфейсы, что среди прочего привело к появлению обертки над pgxpool.Pool, однако позволило добиться большего покрытия тестами.
-
Для соблюдения атомарности трансферов монет и покупок используются транзакции.
-
База данных создаётся из файла init.sql