https://github.com/zensam7/education
Сайт на Golang по типу Habra (в основном делаю упор на backend)
https://github.com/zensam7/education
golang site
Last synced: about 1 year ago
JSON representation
Сайт на Golang по типу Habra (в основном делаю упор на backend)
- Host: GitHub
- URL: https://github.com/zensam7/education
- Owner: ZenSam7
- Created: 2023-12-17T16:02:49.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-22T08:12:06.000Z (over 1 year ago)
- Last Synced: 2025-02-03T11:15:02.285Z (over 1 year ago)
- Topics: golang, site
- Language: Go
- Homepage:
- Size: 1.06 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
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:
```shell
docker compose up
```
Или можно выполнить команду на ubuntu (не рекомендую, может всё сломаться):
```shell
make from_scratch
```
Если выдаёт ошибку `--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.`, то запустите сначала это, а потом ещё раз команду выше:
```shell
export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin
```
Убрать всё что было создано:
```shell
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 — всякие дополнительные инструменты для реализации работы основного кода продукта (типа хеширование паролей, отправка имейлов, валидация данных...)
Архитектура бд: