from __future__ import annotations # P0 transitional router module. # Route functions remain behavior-compatible while ui_server.py becomes # an application assembly layer. Runtime dependencies are injected once # during registration to avoid circular imports. def _inject(context): globals().update(context) async def get_synced_favorites(request: Request): supplied_uid = str(request.query_params.get("user_id") or "").strip() uid, auth_user = await resolve_request_user(request, supplied_uid) if not valid_user_id(uid): raise HTTPException(400, "invalid user_id") return { "favorites": _read_server_favorites(uid), "sync_enabled": bool(auth_user), "storage_mode": _favorites_storage_mode(), "user_id": uid, } async def put_synced_favorites(body: FavoritesSyncRequest, request: Request): uid, auth_user = await resolve_request_user(request, body.user_id) if not valid_user_id(uid): raise HTTPException(400, "invalid user_id") if AUTH_ENABLED and not auth_user: raise HTTPException(401, "Authentication required") items = _write_server_favorites(uid, body.favorites) return { "favorites": items, "sync_enabled": bool(auth_user), "storage_mode": _favorites_storage_mode(), "count": len(items), } async def get_synced_workspace(request: Request): supplied_uid=str(request.query_params.get("user_id") or "").strip() uid,auth_user=await resolve_request_user(request,supplied_uid) if AUTH_ENABLED and not auth_user: raise HTTPException(401,"Authentication required") data=_read_server_workspace(uid) return {**data,"sync_enabled":bool(auth_user),"storage_mode":_favorites_storage_mode(),"user_id":uid} async def put_synced_workspace(body: WorkspaceSyncRequest, request: Request): uid,auth_user=await resolve_request_user(request,body.user_id) if AUTH_ENABLED and not auth_user: raise HTTPException(401,"Authentication required") data=_write_server_workspace(uid,body.sessions,body.settings) return {**data,"sync_enabled":bool(auth_user),"storage_mode":_favorites_storage_mode(),"user_id":uid} def register_user_state_routes(app, context): _inject(context) app.add_api_route("/api/sidebar/favorites", get_synced_favorites, methods=["GET"]) app.add_api_route("/api/sidebar/favorites", put_synced_favorites, methods=["PUT"]) app.add_api_route("/api/sidebar/workspace", get_synced_workspace, methods=["GET"]) app.add_api_route("/api/sidebar/workspace", put_synced_workspace, methods=["PUT"])