HTTP сервер, реализующий REST API, выполненный в рамках тестового задания на стажировку для компании "Avito".
- Docker
- Docker compose
- goose (для применения миграций)
- Go 1.23
- Склонируйте проект
git clone [email protected]:a1ek1/merch-service.git
cd merch-service
- Запустите контейнер с базой данных
# Команду выполняем из директории merch-service
docker-compose up
После выполнения данной команды у вас должен запуститься контейнер с PostgreSQL, достуный на порту 5435
- Примените миграции
Если у вас не установлен goose, то нужно в командной строке выполнить команду
go install github.com/pressly/goose/v3/cmd/goose@latest
После установки проверьте корректность работы
goose --version
Дальше нужно перейти в директорию merch-service/migrations и выполнить следующую команду
# Указаны значения по умолчанию. Если поменяете в конфиге и в docker-compose.yml, то здесь будут другие данные
goose postgres "host=localhost user=postgres port=5434 password=postgres database=merch_service sslmode=disable" up
Вам должно вывестить сообщение об успешном применении миграций
- Запустите файл main.go
# Из директории merch-service
go run cmd/main.go
После выполнения этой команды сервер будет доступен на localhost:8080
- Регистрация/авторизация в сервисе. Вам возвращается JWT токен.
curl -X POST http://localhost:8080/api/auth \
-H "Content-Type: application/json" \
-d "{
\"username\":\"{логин}\",
\"password\":\"{пароль}\"
}"
- Покупка предметов
# Введите токен, полученный при регистрации/авторизации
curl -X GET "http://localhost:8080/api/buy/{название_предмета}" \
-H "Authorization: Bearer {токен}"
- Отправка монет пользователю
# Введите число нужных транзакций
curl -X POST http://localhost:8080/api/sendCoin \
-H "Authorization: Bearer {токен_отправителя}" \
-H "Content-Type: application/json" \
-d "{\"toUsername\": \"{логин_получателя}\", \"amount\": {сумма_перевода}}"
- Получение информации о пользователе
# Введите токен пользователя, информацию о котором вы хотите получить
curl -X GET http://localhost:8080/api/info \
-H "Authorization: Bearer {токен}"