- Регистрация и аутентификация пользователей с помощью JWT токенов.
- Аутентифицированный пользователь может создать свой реферальный код, получить свой код и удалить код, если он не был использован для регистрации. Использованные коды продолжают храниться в БД. Данные пользователя для создания, получения и удаления кодов получаются из payload секции JWT токена.
- Получение валидного реферального кода по электронной почте пользователя.
- Регистрация пользователей в качестве рефералов по неиспользованным и неистекшим кодам.
- Получение списка рефералов по идентификатору реферера.
- Код проекта разделен на три слоя: транспортный, сервисный и слой работы с БД.
- Настройки сервиса вынесены в конфиг файл. Логирование через пакет slog стандартной библиотеки.
- Основной код покрыт тестами. Отдельные компоненты системы тестируются с использованием моков.
- Завершение работы через graceful shutdown.
- Составлена документация в Swagger.
- Сборка и запуск сервиса в Docker контейнерах через docker compose.
Стек: Go, PostgreSQL, Docker, Swagger
-
Установить Docker, если не установлен
-
Склонировать проект командой
git clone [email protected]:vershinink/referral-system.git
-
В корневой папке проекта выполнить команду
sudo docker compose --env-file creds/.env.creds up -d
-
Сервер слушает по адресу
http://localhost:8080
Swagger документация доступна по адресу
http://localhost:8081
-
Для остановки сервиса выполните команду
sudo docker compose --env-file creds/.env.creds down
Для запуска тестов необходимо отдельно запустить контейнер с БД PostgreSQL. Это можно сделать комиандой
sudo docker compose -f docker/postgresql.yaml up -d
БД будет содержать отдельную базу tests
для тестирования методов работы с базой данных.
Для запуска самих тестов нужно перейти в каталог internal
и там выполнить команду
go test ./...