All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m8s
All three services now fetch page data via (service ...) IO primitives in .sx defpages instead of Python middleman functions. - Account: newsletters-data → AccountPageService.newsletters_data - Federation: 8 page helpers → FederationPageService methods (timeline, compose, search, following, followers, notifications) - Cart: 4 page helpers → CartPageService methods (overview, page-cart, admin, payments) - Serializers moved to service modules, thin delegates kept for routes - ~520 lines of Python page helpers removed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
"""Account page data service — provides serialized dicts for .sx defpages."""
|
|
from __future__ import annotations
|
|
|
|
|
|
class AccountPageService:
|
|
"""Service for account page data, callable via (service "account-page" ...)."""
|
|
|
|
async def newsletters_data(self, session, **kw):
|
|
"""Return newsletter list with user subscription status."""
|
|
from quart import g
|
|
from sqlalchemy import select
|
|
from shared.models import UserNewsletter
|
|
from shared.models.ghost_membership_entities import GhostNewsletter
|
|
|
|
result = await session.execute(
|
|
select(GhostNewsletter).order_by(GhostNewsletter.name)
|
|
)
|
|
all_newsletters = result.scalars().all()
|
|
|
|
sub_result = await session.execute(
|
|
select(UserNewsletter).where(
|
|
UserNewsletter.user_id == g.user.id,
|
|
)
|
|
)
|
|
user_subs = {un.newsletter_id: un for un in sub_result.scalars().all()}
|
|
|
|
newsletter_list = []
|
|
for nl in all_newsletters:
|
|
un = user_subs.get(nl.id)
|
|
newsletter_list.append({
|
|
"newsletter": {"id": nl.id, "name": nl.name, "description": nl.description},
|
|
"un": {"newsletter_id": un.newsletter_id, "subscribed": un.subscribed} if un else None,
|
|
"subscribed": un.subscribed if un else False,
|
|
})
|
|
|
|
from shared.infrastructure.urls import account_url
|
|
return {
|
|
"newsletter_list": newsletter_list,
|
|
"account_url": account_url(""),
|
|
}
|