Recipe corpus (#108): - Add _MAIN_INGREDIENT_SIGNALS to tag_inferrer.py (Chicken/Beef/Pork/Fish/Pasta/ Vegetables/Eggs/Legumes/Grains/Cheese) — infers main:* tags from ingredient names - Update browser_domains.py main_ingredient categories to use main:* tag queries instead of raw food terms; recipe_browser_fts now has full 3.19M row coverage (was ~1.2K before backfill) Bug fixes: - Fix community posts response shape (#96): add total/page/page_size fields - Fix export endpoint arg types (#92) - Fix household invite store leak (#93) - Fix receipts endpoint issues - Fix saved_recipes endpoint - Add session endpoint (app/api/endpoints/session.py) Shopping list: - Add migration 033_shopping_list.sql - Add shopping schemas (app/models/schemas/shopping.py) - Add ShoppingView.vue, ShoppingItemRow.vue, shopping.ts store Frontend: - InventoryList, RecipesView, RecipeDetailPanel polish - App.vue routing updates for shopping view Docs: - Add user-facing docs under docs/ (getting-started, user-guide, reference) - Add screenshots
31 lines
944 B
Python
31 lines
944 B
Python
"""Session bootstrap endpoint — called once per app load by the frontend.
|
|
|
|
Logs auth= + tier= for log-based analytics without client-side tracking.
|
|
See Circuit-Forge/kiwi#86.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from app.cloud_session import CloudUser, _auth_label, get_session
|
|
|
|
router = APIRouter()
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
@router.get("/bootstrap")
|
|
def session_bootstrap(session: CloudUser = Depends(get_session)) -> dict:
|
|
"""Record auth type and tier for log-based analytics.
|
|
|
|
Expected log output:
|
|
INFO:app.api.endpoints.session: session auth=authed tier=paid
|
|
INFO:app.api.endpoints.session: session auth=anon tier=free
|
|
"""
|
|
log.info("session auth=%s tier=%s", _auth_label(session.user_id), session.tier)
|
|
return {
|
|
"auth": _auth_label(session.user_id),
|
|
"tier": session.tier,
|
|
"has_byok": session.has_byok,
|
|
}
|