agnes-the-ai-analyst/app/api/settings.py
ZdenekSrotyr e0ce91ddb9 feat: add dataset permissions, script execution, Kamal config, CI/CD
- SyncSettingsRepository + DatasetPermissionRepository with RBAC
- Script deploy/run/undeploy API with import sandboxing
- User sync settings API with permission checks
- 4 CLI skills (connectors, security, notifications, corporate-memory)
- Kamal production + staging configs
- GitHub Actions CI + deploy workflows
- 91 total tests passing
2026-03-27 15:40:11 +01:00

53 lines
1.7 KiB
Python

"""User sync settings endpoints."""
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from typing import Optional, List
import duckdb
from app.auth.dependencies import get_current_user, _get_db
from src.repositories.sync_settings import SyncSettingsRepository, DatasetPermissionRepository
router = APIRouter(prefix="/api/settings", tags=["settings"])
class DatasetSettingRequest(BaseModel):
dataset: str
enabled: bool
@router.get("")
async def get_settings(
user: dict = Depends(get_current_user),
conn: duckdb.DuckDBPyConnection = Depends(_get_db),
):
"""Get current user's sync settings and permissions."""
settings_repo = SyncSettingsRepository(conn)
perm_repo = DatasetPermissionRepository(conn)
settings = settings_repo.get_user_settings(user["id"])
permissions = perm_repo.get_user_permissions(user["id"])
return {
"user_id": user["id"],
"sync_settings": settings,
"permissions": permissions,
}
@router.put("/dataset")
async def update_dataset_setting(
request: DatasetSettingRequest,
user: dict = Depends(get_current_user),
conn: duckdb.DuckDBPyConnection = Depends(_get_db),
):
"""Enable or disable a dataset for sync."""
# Check permission
perm_repo = DatasetPermissionRepository(conn)
if not perm_repo.has_access(user["id"], request.dataset):
raise HTTPException(status_code=403, detail=f"No access to dataset '{request.dataset}'")
settings_repo = SyncSettingsRepository(conn)
settings_repo.set_dataset_enabled(user["id"], request.dataset, request.enabled)
return {"dataset": request.dataset, "enabled": request.enabled}