This commit is contained in:
@@ -1,68 +1,46 @@
|
||||
import asyncio
|
||||
import logging
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import List
|
||||
|
||||
import requests
|
||||
import json
|
||||
|
||||
from models.member import ChatMember
|
||||
from services.logger import root_logger as logger
|
||||
from settings import API_BASE
|
||||
from services.rediscache import redis
|
||||
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
|
||||
def _request_endpoint(query_name, body) -> dict:
|
||||
logger.debug(f"requesting {query_name}...")
|
||||
response = requests.post(
|
||||
API_BASE, headers={"Content-Type": "application/json"}, json=body, timeout=30.0
|
||||
)
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
r = response.json()
|
||||
result = r.get("data", {}).get(query_name, {})
|
||||
if result:
|
||||
logger.info(f"entries amount in result: {len(result)} ")
|
||||
return result
|
||||
except ValueError as e:
|
||||
logger.error(f"Error decoding JSON response: {e}")
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
def get_all_authors():
|
||||
query_name = "get_authors_all"
|
||||
authors = []
|
||||
redis_key = "user:*"
|
||||
|
||||
gql = {
|
||||
"query": "query { " + query_name + "{ id slug pic name user } }",
|
||||
"variables": None,
|
||||
}
|
||||
result = redis.execute("GET", redis_key)
|
||||
if isinstance(result, str):
|
||||
authors = json.loads(result)
|
||||
|
||||
return _request_endpoint(query_name, gql)
|
||||
return authors
|
||||
|
||||
|
||||
def get_author_by_user(user: str):
|
||||
operation = "GetAuthorId"
|
||||
query_name = "get_author_id"
|
||||
gql = {
|
||||
"query": f"query {operation}($user: String!) {{ {query_name}(user: $user){{ id }} }}", # noqa E201, E202
|
||||
"operationName": operation,
|
||||
"variables": {"user": user.strip()},
|
||||
}
|
||||
author = None
|
||||
redis_key = f"user:{user}"
|
||||
|
||||
return _request_endpoint(query_name, gql)
|
||||
result = redis.execute("GET", redis_key)
|
||||
if isinstance(result, str):
|
||||
author = json.loads(result)
|
||||
|
||||
return author
|
||||
|
||||
|
||||
def get_my_followed() -> List[ChatMember]:
|
||||
query_name = "get_my_followed"
|
||||
def get_author_followed(author_id: int):
|
||||
authors = []
|
||||
redis_key = f"author:{author_id}:follows-authors"
|
||||
|
||||
gql = {
|
||||
"query": "query { " + query_name + " { authors { id slug pic name } } }",
|
||||
"variables": None,
|
||||
}
|
||||
result = redis.execute("GET", redis_key)
|
||||
if isinstance(result, str):
|
||||
authors = json.loads(result)
|
||||
|
||||
result = _request_endpoint(query_name, gql)
|
||||
return result.get("authors", [])
|
||||
return authors
|
||||
|
||||
|
||||
class CacheStorage:
|
||||
|
Reference in New Issue
Block a user