Skip to content

About

REST API магазин мерча с переводами монет. Golang, PostgreSQL, Docker.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

Merch Shop API

Высоконагруженный REST-сервис для внутреннего магазина компании.
Позволяет сотрудникам покупать мерч за монеты и переводить монеты друг другу.


🛠️ Стек технологий

  • Go 1.25
  • PostgreSQL 15
  • Docker / Docker Compose
  • JWT для авторизации
  • chi — роутер
  • testify — тестирование

🌐Функциональность

Эндпоинт Метод Описание Авторизация
/api/auth POST Регистрация / вход Нет
/api/buy/{item} GET Покупка мерча Да
/api/sendCoin POST Перевод монет Да
/api/info GET Информация о пользователе Да

🚀Запуск проекта

1. Клонировать репозиторий

git clone https://github.com/ваш-аккаунт/go-merch-shop.git
cd go-merch-shop

2. Настроить переменные окружения

DB_USER=postgres
DB_PASSWORD=your_password
DB_NAME=merch-shop
DB_PORT=5432
DB_HOST=db
DB_SSLMODE=disable
SERVER_PORT=8080
JWT_SECRET=your-super-secret-key

3. Запустить через Docker Compose

docker-compose up --build

Сервер будет доступен по адресу: http://localhost:8080

📝Примеры запросов

1. Регистрация / Вход

curl -X POST http://localhost:8080/api/auth \
  -H "Content-Type: application/json" \
  -d '{"username":"alex","password":"123"}'

Ответ

{"token":"eyJhbGciOiJIUzI1NiIs..."}

2. Покупка мерча

curl -X GET http://localhost:8080/api/buy/t-shirt \
  -H "Authorization: Bearer <токен>"

Ответ

"мерч успешно приобретен"

3. Перевод монет

curl -X POST http://localhost:8080/api/sendCoin \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <токен>" \
  -d '{"toUser":"ivan","amount":100}'

Ответ

"монеты успешно отправлены"

4. Получения информации

curl -X GET http://localhost:8080/api/info \
  -H "Authorization: Bearer <токен>"

Ответ

{
    "coins": 850,
    "inventory": [
        {"type": "t-shirt", "quantity": 2}
    ],
    "coinHistory": {
        "received": [
            {"fromUser": "ivan", "amount": 50}
        ],
        "sent": [
            {"toUser": "ivan", "amount": 100}
        ]
    }
}

Тестирование

Юнит-тесты (покрытие 66% - бизнес-логика)

go test -cover ./internal/service/...

Архитектура

handlers → services → repository → PostgreSQL
  • Handlers — HTTP-слой (валидация, таймауты)
  • Services — бизнес-логика
  • Repository — работа с БД (транзакции, индексы)

👤 Автор

🐙 GitHub: gopher-95 📧 Email: gopher-95@yandex.ru

About

REST API магазин мерча с переводами монет. Golang, PostgreSQL, Docker.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages