# retoor import logging from typing import Annotated from fastapi import Depends, APIRouter, Request from devplacepy.models import AiCorrectionForm from devplacepy.config import DEFAULT_CORRECTION_PROMPT from devplacepy.database import get_table from devplacepy.responses import action_result from devplacepy.utils import clear_user_cache from devplacepy.services.audit import record as audit from devplacepy.routers.profile._shared import resolve_customization_target from devplacepy.dependencies import json_or_form logger = logging.getLogger(__name__) router = APIRouter() @router.post("/{username}/ai-correction") async def set_ai_correction( request: Request, username: str, data: Annotated[AiCorrectionForm, Depends(json_or_form(AiCorrectionForm))], ): target, denied = resolve_customization_target(request, username) if denied is not None: return denied enabled = 1 if data.enabled else 0 sync = 1 if data.sync else 0 prompt = data.prompt.strip() or DEFAULT_CORRECTION_PROMPT get_table("users").update( { "uid": target["uid"], "ai_correction_enabled": enabled, "ai_correction_prompt": prompt, "ai_correction_sync": sync, }, ["uid"], ) clear_user_cache(target["uid"]) logger.info( f"AI correction {'enabled' if enabled else 'disabled'} for {target['username']}" ) audit.record( request, "profile.ai_correction", target_type="user", target_uid=target["uid"], target_label=target["username"], new_value=enabled, summary=( f"{'enabled' if enabled else 'disabled'} AI content correction " f"for {target['username']}" ), links=[audit.target("user", target["uid"], target["username"])], ) url = f"/profile/{target['username']}" return action_result( request, url, data={ "url": url, "enabled": bool(enabled), "sync": bool(sync), "prompt": prompt, }, )