feat(settings): add log retention settings page
Sysadmin/admin-only settings page for configuring how long device log history is kept before pruning. GET/PUT /api/settings/log-retention, new LogRetentionSettings page, nav entry, and route. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
from shared.firebase import get_db
|
||||
from settings.log_retention_models import LogRetentionSettings, LogRetentionSettingsUpdate
|
||||
|
||||
COLLECTION = "admin_settings"
|
||||
DOC_ID = "log_retention"
|
||||
|
||||
|
||||
def get_log_retention() -> LogRetentionSettings:
|
||||
"""Get log retention settings from Firestore. Creates defaults if not found."""
|
||||
db = get_db()
|
||||
doc = db.collection(COLLECTION).document(DOC_ID).get()
|
||||
if doc.exists:
|
||||
return LogRetentionSettings(**doc.to_dict())
|
||||
defaults = LogRetentionSettings()
|
||||
db.collection(COLLECTION).document(DOC_ID).set(defaults.model_dump())
|
||||
return defaults
|
||||
|
||||
|
||||
def update_log_retention(data: LogRetentionSettingsUpdate) -> LogRetentionSettings:
|
||||
"""Update log retention settings. Only provided fields are updated."""
|
||||
db = get_db()
|
||||
doc_ref = db.collection(COLLECTION).document(DOC_ID)
|
||||
doc = doc_ref.get()
|
||||
|
||||
existing = doc.to_dict() if doc.exists else LogRetentionSettings().model_dump()
|
||||
update_data = data.model_dump(exclude_none=True)
|
||||
existing.update(update_data)
|
||||
|
||||
normalized = LogRetentionSettings(**existing)
|
||||
doc_ref.set(normalized.model_dump())
|
||||
return normalized
|
||||
Reference in New Issue
Block a user