Files
security-alert-center/backend/app/services/mobile_settings.py
T
PapaTramp 563b836acc feat: Seaca mobile API, enrollment, FCM push and admin UI (0.9.0)
Adds mobile device registration by admin codes, refresh tokens, push channel
in notification policy, and Settings section for managing Seaca clients.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 13:19:14 +10:00

59 lines
1.8 KiB
Python

from dataclasses import dataclass
from sqlalchemy.orm import Session
from app.models.mobile_settings import MOBILE_SETTINGS_ROW_ID, MobileSettings
@dataclass(frozen=True)
class MobileSettingsConfig:
devices_allowed: bool
max_devices_per_user: int
min_app_version: str | None
source: str = "db"
def get_effective_mobile_settings(db: Session) -> MobileSettingsConfig:
row = db.get(MobileSettings, MOBILE_SETTINGS_ROW_ID)
if row is None:
return MobileSettingsConfig(
devices_allowed=False,
max_devices_per_user=3,
min_app_version=None,
source="default",
)
return MobileSettingsConfig(
devices_allowed=bool(row.devices_allowed),
max_devices_per_user=max(1, int(row.max_devices_per_user or 3)),
min_app_version=(row.min_app_version or "").strip() or None,
source="db",
)
def upsert_mobile_settings(
db: Session,
*,
devices_allowed: bool,
max_devices_per_user: int,
min_app_version: str | None,
) -> MobileSettingsConfig:
if max_devices_per_user < 1 or max_devices_per_user > 50:
raise ValueError("max_devices_per_user must be between 1 and 50")
cleaned_version = (min_app_version or "").strip() or None
row = db.get(MobileSettings, MOBILE_SETTINGS_ROW_ID)
if row is None:
row = MobileSettings(
id=MOBILE_SETTINGS_ROW_ID,
devices_allowed=devices_allowed,
max_devices_per_user=max_devices_per_user,
min_app_version=cleaned_version,
)
db.add(row)
else:
row.devices_allowed = devices_allowed
row.max_devices_per_user = max_devices_per_user
row.min_app_version = cleaned_version
db.commit()
db.refresh(row)
return get_effective_mobile_settings(db)