se agregaron nuevas caracteristicas

This commit is contained in:
Carlos Tello
2026-08-13 23:07:01 -03:00
parent 1bfb808c79
commit d736db982e
23 changed files with 1244 additions and 100 deletions
+67
View File
@@ -0,0 +1,67 @@
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from app.models.models import SystemSetting
from app.core.config import settings
from pathlib import Path
import os
DEFAULT_SETTINGS = {
"storage_root": settings.STORAGE_ROOT,
"global_quota_gb": "1000",
"default_client_quota_gb": "100",
"default_keep_daily": str(settings.DEFAULT_RETENTION_DAILY),
"default_keep_weekly": str(settings.DEFAULT_RETENTION_WEEKLY),
"default_keep_monthly": str(settings.DEFAULT_RETENTION_MONTHLY),
}
async def get_setting(db: AsyncSession, key: str) -> str:
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
setting = result.scalar_one_or_none()
if setting:
return setting.value
return DEFAULT_SETTINGS.get(key, "")
async def get_all_settings(db: AsyncSession) -> dict:
result = await db.execute(select(SystemSetting))
db_settings = {s.key: s.value for s in result.scalars().all()}
# Merge defaults and add them if not present in db
updated = False
for k, v in DEFAULT_SETTINGS.items():
if k not in db_settings:
db_settings[k] = v
db.add(SystemSetting(key=k, value=v))
updated = True
if updated:
await db.commit()
return db_settings
async def update_settings_service(db: AsyncSession, new_settings: dict) -> dict:
from app.storage.local import storage_provider
for k, v in new_settings.items():
if k in DEFAULT_SETTINGS and v is not None:
# If changing storage root, validate and apply
if k == "storage_root":
path = Path(v).resolve()
try:
os.makedirs(path, exist_ok=True)
# Test write access
test_file = path / ".write_test"
test_file.touch()
test_file.unlink()
except Exception as e:
raise ValueError(f"Invalid or unwritable storage root path: {str(e)}")
# Apply to in-memory storage provider
storage_provider.root_dir = path
result = await db.execute(select(SystemSetting).where(SystemSetting.key == k))
setting = result.scalar_one_or_none()
if setting:
setting.value = str(v)
else:
db.add(SystemSetting(key=k, value=str(v)))
await db.commit()
return await get_all_settings(db)