2022-07-21 11:58:50 +00:00
|
|
|
from auth.authenticate import login_required
|
2022-08-11 05:53:14 +00:00
|
|
|
from base.orm import local_session
|
2022-08-11 09:09:57 +00:00
|
|
|
from base.resolvers import query
|
|
|
|
from sqlalchemy import and_, desc
|
2022-07-21 11:58:50 +00:00
|
|
|
from orm.shout import Shout, ShoutAuthor, ShoutTopic
|
|
|
|
from orm.topic import TopicFollower
|
|
|
|
from orm.user import AuthorFollower
|
2022-07-21 16:11:39 +00:00
|
|
|
from typing import List
|
2022-07-21 11:58:50 +00:00
|
|
|
|
|
|
|
@query.field("shoutsForFeed")
|
|
|
|
@login_required
|
2022-07-21 16:11:39 +00:00
|
|
|
def get_user_feed(_, info, page, size) -> List[Shout]:
|
2022-07-21 11:58:50 +00:00
|
|
|
user = info.context["request"].user
|
|
|
|
shouts = []
|
|
|
|
with local_session() as session:
|
|
|
|
shouts = session.query(Shout).\
|
|
|
|
join(ShoutAuthor).\
|
|
|
|
join(AuthorFollower).\
|
|
|
|
where(AuthorFollower.follower == user.slug).\
|
|
|
|
order_by(desc(Shout.createdAt))
|
|
|
|
topicrows = session.query(Shout).\
|
|
|
|
join(ShoutTopic).\
|
|
|
|
join(TopicFollower).\
|
|
|
|
where(TopicFollower.follower == user.slug).\
|
|
|
|
order_by(desc(Shout.createdAt))
|
|
|
|
shouts = shouts.union(topicrows).limit(size).offset(page * size).all()
|
|
|
|
return shouts
|
|
|
|
|
|
|
|
@query.field("myCandidates")
|
|
|
|
@login_required
|
2022-07-21 16:11:39 +00:00
|
|
|
async def user_unpublished_shouts(_, info, page = 1, size = 10) -> List[Shout]:
|
2022-07-21 11:58:50 +00:00
|
|
|
user = info.context["request"].user
|
|
|
|
shouts = []
|
|
|
|
with local_session() as session:
|
|
|
|
shouts = session.query(Shout).\
|
|
|
|
join(ShoutAuthor).\
|
|
|
|
where(and_(Shout.publishedAt == None, ShoutAuthor.user == user.slug)).\
|
|
|
|
order_by(desc(Shout.createdAt)).\
|
|
|
|
limit(size).\
|
|
|
|
offset( page * size).\
|
|
|
|
all()
|
|
|
|
return shouts
|