# retoor <retoor@molodetz.nl>
from __future__ import annotations
from devplacepy.database import (
get_daily_topic,
get_polls_by_post_uids,
get_reactions_by_targets,
get_recent_comments_by_post_uids,
get_site_stats,
get_top_authors,
get_user_bookmarks,
get_users_by_uids,
)
from devplacepy.database.attachments_data import get_attachments_by_type
from devplacepy.routers.feed import get_feed_posts
def build_feed_page(
user: dict | None = None,
tab: str = "all",
topic: str | None = None,
search: str = "",
before: str | None = None,
) -> dict:
posts, next_cursor = get_feed_posts(user, tab, topic, search, before)
stats = get_site_stats()
top_authors = get_top_authors(5)
daily_topic = get_daily_topic()
post_uids = [item["post"]["uid"] for item in posts]
attachments_map = get_attachments_by_type("post", post_uids)
recent_comments = get_recent_comments_by_post_uids(post_uids, 3, user)
reactions_map = get_reactions_by_targets("post", post_uids, user)
bookmark_set = (
get_user_bookmarks(user["uid"], "post", post_uids) if user else set()
)
polls_map = get_polls_by_post_uids(post_uids, user)
for item in posts:
uid = item["post"]["uid"]
item["attachments"] = attachments_map.get(uid, [])
item["recent_comments"] = recent_comments.get(uid, [])
item["reactions"] = reactions_map.get(uid, {"counts": {}, "mine": []})
item["bookmarked"] = uid in bookmark_set
item["poll"] = polls_map.get(uid)
return {
"posts": posts,
"next_cursor": next_cursor,
"stats": stats,
"top_authors": top_authors,
"daily_topic": daily_topic,
"online_users": [],
"current_tab": tab,
"current_topic": topic,
"search": search,
}
def build_post_detail(post_uid: str, user: dict | None = None) -> dict:
from devplacepy.database import get_table, load_comments
post = get_table("posts").find_one(uid=post_uid, deleted_at=None)
if not post:
return {"post": None, "author": None, "comments": [], "attachments": []}
author = get_users_by_uids([post["user_uid"]]).get(post["user_uid"])
comments = load_comments("post", post_uid, user)
attachments = get_attachments_by_type("post", [post_uid]).get(post_uid, [])
return {
"post": post,
"author": author,
"comments": comments,
"attachments": attachments,
}
def build_profile_bundle(profile_uid: str, viewer: dict | None = None) -> dict:
from devplacepy.database import get_table
from devplacepy.database.follows import get_follow_counts
user = get_table("users").find_one(uid=profile_uid)
if not user:
return {"user": None, "follow_counts": {}, "awards": [], "posts_count": 0}
follow_counts = get_follow_counts(profile_uid)
return {
"user": user,
"follow_counts": follow_counts,
"awards": [],
"posts_count": 0,
"viewer_relation": {},
}
def build_messages_page(user_uid: str) -> dict:
return {"threads": [], "unread": 0, "partners": {}}
def build_notifications_page(user_uid: str) -> dict:
return {"notifications": [], "actors": {}, "unread_count": 0}
def build_leaderboard_page(viewer_uid: str | None = None) -> dict:
from devplacepy.database import get_leaderboard, get_user_rank
return {
"leaderboard": get_leaderboard(),
"viewer_rank": get_user_rank(viewer_uid) if viewer_uid else None,
}
def build_project_detail(project_uid: str) -> dict:
from devplacepy.database import get_table
project = get_table("projects").find_one(uid=project_uid, deleted_at=None)
owner = None
if project:
owner = get_users_by_uids([project["user_uid"]]).get(project["user_uid"])
return {"project": project, "owner": owner, "files": [], "containers": []}
def build_gist_detail(gist_uid: str, user: dict | None = None) -> dict:
from devplacepy.database import get_table, load_comments
gist = get_table("gists").find_one(uid=gist_uid, deleted_at=None)
author = None
if gist:
author = get_users_by_uids([gist["user_uid"]]).get(gist["user_uid"])
comments = load_comments("gist", gist_uid, user) if gist else []
return {"gist": gist, "author": author, "comments": comments}
def build_game_state(user_uid: str | None = None) -> dict:
return {"store": {}, "leaderboard": []}
def build_admin_dashboard() -> dict:
return {"stats": get_site_stats(), "service_states": []}