nomadweb/backend/app/services/pb_repo.py
eric 96fa96c61e Migrate auth/community/social to PocketBase and wire SeaweedFS S3 uploads.
Keep FastAPI as the only backend; add media upload, ntfy hook, and PB collection bootstrap for production.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 11:19:30 -05:00

81 lines
1.8 KiB
Python

"""Shared PocketBase helpers for store modules."""
from __future__ import annotations
from typing import Any
from app.services.pb_client import PocketBaseError, pb, pb_quote
_pb_ready: bool | None = None
def use_pb() -> bool:
global _pb_ready
if _pb_ready is not None:
return _pb_ready
try:
if not pb.health_ok():
_pb_ready = False
return False
pb.admin_token()
_pb_ready = True
except Exception:
_pb_ready = False
return _pb_ready
def reset_pb_cache() -> None:
global _pb_ready
_pb_ready = None
def q(value: str) -> str:
return pb_quote(value)
def rid(record: dict[str, Any], legacy_field: str = "legacyId") -> str:
return str(record.get(legacy_field) or record.get("id") or "")
def pb_date(value: Any) -> str:
if not value:
return ""
s = str(value)
return s[:10] if len(s) >= 10 else s
def safe_list(collection: str, **kwargs: Any) -> list[dict[str, Any]]:
try:
return pb.list_all(collection, **kwargs)
except PocketBaseError:
return []
def safe_first(collection: str, *, filter: str) -> dict[str, Any] | None:
try:
return pb.first_record(collection, filter=filter)
except PocketBaseError:
return None
def safe_create(collection: str, payload: dict[str, Any]) -> dict[str, Any] | None:
try:
return pb.create_record(collection, payload)
except PocketBaseError:
return None
def safe_update(collection: str, record_id: str, payload: dict[str, Any]) -> dict[str, Any] | None:
try:
return pb.update_record(collection, record_id, payload)
except PocketBaseError:
return None
def find_by_legacy(collection: str, legacy_id: str) -> dict[str, Any] | None:
if not legacy_id:
return None
row = safe_first(collection, filter=f"legacyId={q(legacy_id)}")
if row:
return row
return safe_first(collection, filter=f"id={q(legacy_id)}")