Categorygithub.com/ZenSam7/Education
repositorypackage
0.0.0-20241222081223-f621eecacaa6
Repository: https://github.com/zensam7/education.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

Делаю бекенд учебного сайт

Чему я тут научился (что я тут использовал):

  • Кончно же Golang (интерфейсы, контексты, горутины ...)

  • Сервер на gRPC с HTTP Gateway

  • Зачем-то сделал ещё и RESTful API на фреймворке Gin

  • Авторизация по 2м токенам, отдельно paseto и jwt токены, плюс верификация почты

  • Использовал Redis и как брокер сообщений, и как кэш

  • Развернул приложение в Docker (написал Dockerfile и docker-compose)

  • Mock-тесты и обычные unit-тесты, с общим покрытием ~40%

  • Поработал с CI/CD (GitHub Actions)

  • Лучше освоил linux

  • Имеется репликация данных в отдельный контейнер

  • SQLC для генерации кода на Golang из SQL запроса

  • Где необходимо, сделал транзакции

  • Бд реализовал на PostgreSQL

    Мелочи:

  • Сделал автогенерацию документации (в ./doc/)

  • >6000 строк отлаженного, работающего, лично написанного кода (+5500 сгенерированного)

  • Понял что Makefile — очень удобная штука

  • Migrate для, собственно, миграций

  • Настроил красивый логгер

Как запустить:

Можно запустить через Docker Compose:

docker compose up

Или можно выполнить команду на ubuntu (не рекомендую, может всё сломаться):

make from_scratch

Если выдаёт ошибку --go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1., то запустите сначала это, а потом ещё раз команду выше:

export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin

Убрать всё что было создано:

make clean

Сам проект:

  • api — основное апи, на gRPC, со всеми реальизованными запросами и http gateway для работы ещё и по HTTP
  • api_gin — апи на, собственно, gin (правда преимущества gin как фреймворка почти не использовались из-за его ненужности, т.к. для HTTP сделал http gateway для gRPC, на котором я и сделал основное api, т.е. gin тут как копия gRPC api)
  • db — папка с миграциями и кучей sql-зопросов к бд, которые при помощи sqlc конвертированы в исполняемые на go функции (+ там транзакции)
  • doc — документации (в gRPC_API_doc.swagger.json описаны все запросы к api)
  • my_mock — автосгенерированные моки для мок-тестов
  • protobuf — сгенерированный код для запросов по gRPC
  • proto — все запросы на gRPC
  • redis — брокеры сообщений (воркеры) и кеш запросов, реализованные на редиске
  • token — jwt и paseto токены авторизации (авторизация происходит по системе 2х токенов: refresh и access)
  • tools — всякие дополнительные инструменты для реализации работы основного кода продукта (типа хеширование паролей, отправка имейлов, валидация данных...)

Архитектура бд: