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>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user