XanderMoroz / BookStore

Веб-сервис для управления книжным магазином на Gin-Gonic + Gorm + MySQL + phpMyAdmin + Swagger + Prometheus + Grafana

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Go BookStore

Screen Shot

                                                                Go Contributions welcome License

📋 Table of Contents

  1. 🌀 Описание проекта
  2. 📈 Краткая документация API
  3. 💾 База данных
  4. 🚀 Инструкция по установке
  5. ©️ License

Go Blog - пример backend-сервисова на основе Gin Gonic, Интерфейс API Swagger. База данных - MySQL. ORM - GORM. Мониторинг - Prometheus. Метрики хоста - Node Exporter. Визуализация - Grafana. Сборка - Docker Compose.

Screen Shot

Работа с моделями осуществляется по следующим эндпоинтам:

HTTP Method HTTP request Description
[POST] /users/register Регистрация нового пользователя
[POST] /users/login Авторизация пользователя про логину и паролю
[GET] /api/admin/user Извлечение авторизованного пользователя по токену
[GET] /users/logout Разлогиниться
[POST] /genres Создать новый жанр категорию
[GET] /genres Извлечь все категории
[POST] /genres/add_book Добавить связь между книгой и жанром
[POST] /genres/remove_book Удалить связь между книгой и жанром
[GET] /books Извлечь все книги
[POST] /books Создать новую книгу (только для админов)
[GET] /books/:id Извлечь книгу по ID
[PUT] /books/:id Обновить книгу (только для админов)
[DELETE] /books/:id Удалить книгу (только для админов)
[POST] /user/orders Создать новый заказ
[GET] /user/orders/:id Извлечь заказ по ID (только собственный)
Добавить позицию с книгой в заказ
Удалить позицию с книгой из заказа

База данных содержит 5 моделей:

  • Пользователь (User),
  • Жанр книги (Genrе),
  • Книга (Book),
  • Заказ (Order),
  • Позиция в заказе (Item)
ДЕТАЛЬНАЯ СХЕМА БАЗЫ ДАННЫХ

Screen Shot

  1. Подготовка проекта

1.1 Клонируете репозиторий

git clone https://github.com/XanderMoroz/goBookStore.git

1.2 В корневой папки создаете файл .env

1.3 Заполняете файл .env по следующему шаблону:

################################################################################
# APP Config
# Automatically setup app variables
################################################################################
APP_ENV="DEV"
APP_PORT="8082"
SERVER_ADDRESS=""
ACCESS_TOKEN_SECRET="nduenvrvneu8957hhoiif932ejcp92nf9ne7h3p2982jijpkm2[jw[8h"
ACCESS_TOKEN_EXPIRY_HOUR=1
################################################################################
# MYSQL Config
# Automatically create database and user
################################################################################
DB_DRIVER="MYSQL"
MYSQL_ROOT_PASSWORD=rootpwd
MYSQL_DATABASE=my_db
MYSQL_USER=admin
MYSQL_PASSWORD=adminpassword
MYSQL_PORT=3306         
MYSQL_HOST=127.0.0.1            # Без docker             
MYSQL_HOST="mysql"              # С docker
################################################################################
# PHPMYADMIN Config
################################################################################
phpmyadminPort=8090
MYSQL_IP_Address=mysql 
  1. Запуск проекта с Docker compose

2.1 Создаете и запускаете контейнер через терминал:

sudo docker-compose up --build

2.3 Сервисы доступны для эксплуатации:

  1. Дополнительные настройки

Как подключить phpMyAdmin к БД?
  1. Заходим в браузер по адресу http://127.0.0.1:8090 и вводим данные из .env
MYSQL_USER=admin
MYSQL_PASSWORD=adminpassword

Screen Shot

  1. Готово

Screen Shot

Как подключить Grafana к Prometheus?
  1. Заходим в браузер по адресу http://127.0.0.1:3000 и вводим данные по умолчанию:
  • Email or username: admin
  • Password: admin

Screen Shot

  1. После система потребует придумать новый пароль (это необязательно).

Screen Shot

  1. Мы авторизованы в сервисе Grafana. Добавим новое подключение...

Screen Shot

  1. Ищем в списке Prometheus и кликаем по нему

Screen Shot

  1. Теперь его нужно настроить

Screen Shot

  1. Извлекаем адрес хоста, на котором расположился Prometheus
sudo docker inspect prometheus | grep IPAddress

Screen Shot

  1. Заполняем Адрес сервера Prometheus данными хоста

Screen Shot

  1. Готово
Как сделать авто-генерацию документации Swagger?
  1. Устанавливаете swag
go get github.com/swaggo/swag/cmd/swag

3.2 Устанавливаете GOPATH

export PATH=$PATH:$(go env GOPATH)/bin

3.3 Генерируете новый вариант документации

swag init

About

Веб-сервис для управления книжным магазином на Gin-Gonic + Gorm + MySQL + phpMyAdmin + Swagger + Prometheus + Grafana


Languages

Language:Go 97.2%Language:Dockerfile 2.7%Language:Makefile 0.1%