sort-order-reimplement-syntetic-stat
All checks were successful
Deploy on push / deploy (push) Successful in 23s
All checks were successful
Deploy on push / deploy (push) Successful in 23s
This commit is contained in:
parent
54980faf49
commit
c1a66500e5
|
@ -10,6 +10,37 @@ from services.db import local_session
|
||||||
from services.logger import root_logger as logger
|
from services.logger import root_logger as logger
|
||||||
|
|
||||||
|
|
||||||
|
def add_topic_stat_columns(q):
|
||||||
|
aliased_shout = aliased(ShoutTopic)
|
||||||
|
q = q.outerjoin(aliased_shout).add_columns(
|
||||||
|
func.count(distinct(aliased_shout.shout)).label("shouts_stat")
|
||||||
|
)
|
||||||
|
aliased_follower = aliased(TopicFollower)
|
||||||
|
q = q.outerjoin(aliased_follower, aliased_follower.follower == Author.id
|
||||||
|
).add_columns(
|
||||||
|
func.count(distinct(aliased_follower.follower)).label("followers_stat")
|
||||||
|
)
|
||||||
|
|
||||||
|
q = q.group_by(Author.id)
|
||||||
|
|
||||||
|
return q
|
||||||
|
|
||||||
|
|
||||||
|
def add_author_stat_columns(q):
|
||||||
|
aliased_shout = aliased(ShoutAuthor)
|
||||||
|
q = q.outerjoin(aliased_shout).add_columns(
|
||||||
|
func.count(distinct(aliased_shout.shout)).label("shouts_stat")
|
||||||
|
)
|
||||||
|
aliased_follower = aliased(AuthorFollower)
|
||||||
|
q = q.outerjoin(aliased_follower, aliased_follower.follower == Author.id
|
||||||
|
).add_columns(
|
||||||
|
func.count(distinct(aliased_follower.follower)).label("followers_stat")
|
||||||
|
)
|
||||||
|
|
||||||
|
q = q.group_by(Author.id)
|
||||||
|
|
||||||
|
return q
|
||||||
|
|
||||||
def get_topic_shouts_stat(topic_id: int):
|
def get_topic_shouts_stat(topic_id: int):
|
||||||
q = (
|
q = (
|
||||||
select(func.count(distinct(ShoutTopic.shout)))
|
select(func.count(distinct(ShoutTopic.shout)))
|
||||||
|
@ -143,27 +174,20 @@ def get_with_stat(q):
|
||||||
is_author = f"{q}".lower().startswith("select author")
|
is_author = f"{q}".lower().startswith("select author")
|
||||||
# is_topic = f"{q}".lower().startswith("select topic")
|
# is_topic = f"{q}".lower().startswith("select topic")
|
||||||
result = []
|
result = []
|
||||||
|
add_stat_handler = add_author_stat_columns if is_author else add_topic_stat_columns
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
result = session.execute(q)
|
result = session.execute(add_stat_handler(q))
|
||||||
|
|
||||||
for cols in result:
|
for cols in result:
|
||||||
entity = cols[0]
|
entity = cols[0]
|
||||||
stat = dict()
|
stat = dict()
|
||||||
stat["shouts"] = (
|
stat["shouts"] = cols[1]
|
||||||
get_author_shouts_stat(entity.id)
|
stat["followers"] = cols[2]
|
||||||
if is_author
|
|
||||||
else get_topic_shouts_stat(entity.id)
|
|
||||||
)
|
|
||||||
stat["authors"] = (
|
stat["authors"] = (
|
||||||
get_author_authors_stat(entity.id)
|
get_author_authors_stat(entity.id)
|
||||||
if is_author
|
if is_author
|
||||||
else get_topic_authors_stat(entity.id)
|
else get_topic_authors_stat(entity.id)
|
||||||
)
|
)
|
||||||
stat["followers"] = (
|
|
||||||
get_author_followers_stat(entity.id)
|
|
||||||
if is_author
|
|
||||||
else get_topic_followers_stat(entity.id)
|
|
||||||
)
|
|
||||||
if is_author:
|
if is_author:
|
||||||
stat["comments"] = get_author_comments_stat(entity.id)
|
stat["comments"] = get_author_comments_stat(entity.id)
|
||||||
entity.stat = stat
|
entity.stat = stat
|
||||||
|
|
Loading…
Reference in New Issue
Block a user