.gitea/workflows | ||
.github/workflows | ||
orm | ||
resolvers | ||
schemas | ||
services | ||
.editorconfig | ||
.gitignore | ||
.pre-commit-config.yaml | ||
CHANGELOG.txt | ||
Dockerfile | ||
main.py | ||
nginx.conf.sigil | ||
pyproject.toml | ||
README.md | ||
settings.py |
Техстек
- sqlalchemy
- redis
- ariadne
- starlette
- granian
Локальная разработка
Подготовьте зависимости
osx:
brew install redis nginx postgres
brew services start redis
debian/ubuntu:
apt install redis nginx
Затем запустите postgres, redis и наш API-сервер:
mkdir .venv
python3.12 -m venv .venv
poetry env use .venv/bin/python3.12
poetry update
poetry granian --no-ws --host 0.0.0.0 --port 8080 --interface asgi main:app
Подключенные сервисы
Для межсерверной коммуникации используются отдельные логики, папка services/*
содержит адаптеры для использования базы данных, redis
, кеширование и клиенты для запросов GraphQL.
auth.py
Задайте переменную окружения WEBHOOK_SECRET
чтобы принимать запросы по адресу /new-author
от сервера авторизации. Событие ожидается при создании нового пользователя. Для авторизованных запросов и мутаций фронтенд добавляет к запросу токен авторизации в заголовок Authorization
.
viewed.py
Задайте переменные окружения GOOGLE_ANALYTICS_TOKEN
и GOOGLE_GA_VIEW_ID
для сбора данных из Google Analytics.
search.py
Позволяет получать результаты пользовательских поисковых запросов в кешируемом виде от нашего сервера ElasticSearch с оценкой score
, объединенные с запросами к базе данных, запрашиваем через GraphQL API load_shouts_search
.
notify.py
Отправка уведомлений по Redis PubSub каналам, согласно структуре данных, за которую отвечает сервис уведомлений
unread.py
Счетчик непрочитанных сообщений получается через Redis-запрос к данным сервиса сообщений.
following.py
Внутренний сервис, обеспечивающий асинхронный доступ к хранилищу подписчиков на комментарии, топики и авторы в оперативной памяти.