|
# retoor <retoor@molodetz.nl>
|
|
|
|
from fastapi import Request
|
|
|
|
from devplacepy.database import get_table
|
|
from devplacepy.services.game import store
|
|
from devplacepy.services.pubsub import publish
|
|
|
|
|
|
def farm_topic(username: str) -> str:
|
|
return f"public.game.farm.{username}"
|
|
|
|
|
|
async def notify_farm(username: str) -> None:
|
|
if not username:
|
|
return
|
|
try:
|
|
await publish(farm_topic(username), {"kind": "update", "username": username})
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def owner_by_username(username: str) -> dict | None:
|
|
return get_table("users").find_one(username=username)
|
|
|
|
|
|
def state_payload(user: dict, viewer: dict | None = None) -> dict:
|
|
farm = store.ensure_farm(user["uid"])
|
|
return store.serialize_farm(farm, viewer=viewer or user, owner=user)
|
|
|
|
|
|
def game_seo(request: Request, title: str, description: str) -> dict:
|
|
from devplacepy.seo import base_seo_context
|
|
|
|
return base_seo_context(
|
|
request,
|
|
title=title,
|
|
description=description,
|
|
robots="noindex,follow",
|
|
breadcrumbs=[
|
|
{"name": "Home", "url": "/feed"},
|
|
{"name": "Code Farm", "url": "/game"},
|
|
],
|
|
)
|