https://github.com/govorov1705/go-commerce
Интернет-магазин, реализованный с использованием микросервисной архитектуры на языке Go.
https://github.com/govorov1705/go-commerce
docker-compose go kafka microservices postgresql
Last synced: about 2 months ago
JSON representation
Интернет-магазин, реализованный с использованием микросервисной архитектуры на языке Go.
- Host: GitHub
- URL: https://github.com/govorov1705/go-commerce
- Owner: Govorov1705
- License: mit
- Created: 2025-07-06T13:01:53.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-07-07T07:48:55.000Z (12 months ago)
- Last Synced: 2025-08-11T21:37:15.580Z (11 months ago)
- Topics: docker-compose, go, kafka, microservices, postgresql
- Language: Go
- Homepage:
- Size: 334 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🛒 Go-commerce
Go-commerce - это интернет-магазин, реализованный с использованием микросервисной архитектуры на языке Go.
В проекте использовались многие из лучших практик разработки микросервисов:
- Слоистая архитектура
- Отдельная база данных под каждый микросервис
- Безопасные распределенные транзакции с помощью SAGA
- Основная коммуникация между микросервисами происходит с помощью gRPC
- Для асинхронной коммуникации используется Apache Kafka
- Настроен client-side gRPC балансировщик нагрузки для будущего использования с несколькими инстансами каждого микросервиса
- Использование интерфейсов для тестируемости и легкой замены зависимостей (хранилище, платежный провайдер)
В сумме, данные решения помогают ориентировать систему на масштабируемость, удобство разработки и высокие нагрузки.
## 🚀 Функционал
- Создание пользователя и получение JWT
- Просмотр доступных товаров (списком или конкретных)
- Добавление товаров в корзину
- Удаление товаров из корзины
- Просмотр информации по корзине
- Создание заказа
- Оплата заказа через платежного провайдера (ЮKassa)
- Просмотр информации по заказу
- Возможность добавления новых товаров (только для пользователей с ролью "admin")
## 🛠️ Технологии
- **Язык программирования**: Go 1.24.0
- **API**: gRPC + REST (через Gateway)
- **Хранение данных**: PostgreSQL 17.2
- **Оркестрация**: Docker Compose
- **События**: Apache Kafka
- **Аутентификация**: JWT
- **Документация**: Swagger
## 📖 Инструкция по запуску проекта
Склонируйте проект:
```sh
$ git clone https://github.com/Govorov1705/go-commerce.git
```
Перейдите в папку с проектом:
```sh
$ cd go-commerce
```
Для запуска проекта необходимо зарегистрироваться в системе провайдера платежей ЮKassa (данный провайдер используется в проекте). Для регистрации, перейдите по данной ссылке и следуйте указаниям: https://yookassa.ru/joinups?createTestShop=true
На данном этапе необходимо выбрать опцию "**К тестированию платежей**":

Когда откроется страница личного кабинета, скопируйте ID вашего тестового магазина:

Данный ID необходимо вставить в переменную _YOOKASSA_STORE_ID_ в файле _.env_, который находится по пути _./payments/.env_ относительно корня проекта.
Далее вам нужно вернуться в личный кабинет провайдера платежей, открыть вкладку "**Интеграция**" и перейти на страницу "**Ключи API**":

На открытой странице вам необходимо скопировать ваш "**Секретный ключ**":

Скопированный ключ необходимо вставить в переменную _YOOKASSA_SECRET_KEY_, из того же файла _.env_, который находится по пути _./payments/.env_ относительно корня проекта.
Для того, чтобы работал webhook от провайдера платежей (он отвечает за обработку обновления статусов платежей - платеж прошел / отменен), необходимо, чтобы сервер, на котором находился обработчик этого webhook'а работал по протоколу HTTPS. В локальной среде достичь этого можно с использованием [Ngrok](https://ngrok.com/). К сожалению, для доступа к данному сервису необходимо иметь VPN.
После регистрации в **Ngrok**, заходите в dashboard, выбирайте пункт "**Setup & Installation**":

Сверху страницы выбираете вашу платформу, а затем просто следуете инструкциям из пункта "**Connect**" до команды с запуском утилиты:

Теперь вы можете запустить утилиту следующим образом (порт 8087 выбран не случайно - такой порт выбран в docker-compose-файле проекта для сервера, который будет обрабатывать webhook платежного провайдера):
```sh
$ ngrok http http://localhost:8087
```
После запуска утилиты, в терминале вы увидите URL, который будет доступен извне вашей локальной сети:

Данный URL необходимо скопировать, вернуться в личный кабинет платежного провайдера, перейти во вкладку "**Интеграция**", на страницу "**HTTP-уведомления**":

На открывшейся странице нужно нажать кнопку "**Изменить настройки**", вставить скопированный из предыдущего шага URL в поле "**Ссылка**", добавив в конце строки "/webhook":

Также в меню "**Выбранные события**" нужно оставить галочки только на пунктах "**payment.succeeded**" и "**payment.canceled**" - остальные события мой проект не обрабатывает:

После выполненных действий можно нажать "**Сохранить**"
На данном этапе проект полностью готов к запуску. Находясь в корневой папке проекта, выполните следующую команду для запуска:
```sh
$ docker compose up
```
После того, как все микросервисы успешно запустятся, вам будет доступна интерактивная веб-документация [тут](http://localhost:8080/api/swagger/index.html#/)
## 🧑💻 Работа с проектом
Все client-side endpoint'ы доступны в интерактивной документации.
Для доступа к endpoint'ам, требующим аутентификацию, необходимо получить JWT.
Чтобы получить JWT, необходимо отправить запрос на _/api/auth_ с данными в виде имени пользователя и пароля. Если такого аккаунта еще не было создано - он создастся, а вы получите уникальный JWT, который нужно скопировать.
Чтобы прикрепить данный токен к вашей сессии, необходимо нажать зеленую кнопку "**Authorize**" в правом верхнем углу экрана, и ввести в поле "**Value**" строку в следующем формате: Bearer \<ваш JWT>, а после чего, снова нажать "**Authorize**".
С данного момента вы можете полноценно пользоваться всеми функциями проекта, кроме создания новых продуктов (admin-only).