app/api/routers/attachments.py:41:def _ext(name: str) -> str: app/api/routers/attachments.py:46:def _kind_for(ext: str) -> Optional[str]: app/api/routers/attachments.py:53:def _serialize(att: Attachment) -> dict: app/api/routers/attachments.py:68:async def _get_own(db: AsyncSession, user: User, att_id: int) -> Attachment: app/api/routers/attachments.py:75:@router.get("/list") app/api/routers/attachments.py:76:async def list_attachments(kind: str = Query("", description="filter by kind"), app/api/routers/attachments.py:96:@router.post("/upload") app/api/routers/attachments.py:97:async def upload_attachment(file: UploadFile = File(...), app/api/routers/attachments.py:170:@router.post("/convert-pdf") app/api/routers/attachments.py:171:async def convert_html_to_pdf(template_id: int = Query(..., description="HTML template to render"), app/api/routers/attachments.py:216:@router.get("/{att_id}") app/api/routers/attachments.py:217:async def get_attachment(att_id: int, user: User = Depends(get_current_user), app/api/routers/attachments.py:226:@router.get("/{att_id}/download") app/api/routers/attachments.py:227:async def download_attachment(att_id: int, user: User = Depends(get_current_user), app/api/routers/attachments.py:243:@router.get("/{att_id}/preview") app/api/routers/attachments.py:244:async def preview_attachment(att_id: int, user: User = Depends(get_current_user), app/api/routers/attachments.py:275:@router.post("/{att_id}/delete") app/api/routers/attachments.py:276:async def delete_attachment(att_id: int, db: AsyncSession = Depends(get_db), app/api/routers/attachments.py:291:@router.post("/clear-all") app/api/routers/attachments.py:292:async def clear_all_attachments(db: AsyncSession = Depends(get_db), app/api/routers/phones.py:22:class PhoneIn(BaseModel): app/api/routers/phones.py:35:class PhonePatch(BaseModel): app/api/routers/phones.py:40:def _serialize(p: CompanyPhoneNumber) -> dict: app/api/routers/phones.py:51:async def _get_own(db: AsyncSession, user: User, pid: int) -> CompanyPhoneNumber: app/api/routers/phones.py:58:@router.get("/list") app/api/routers/phones.py:59:async def list_phones(active_only: bool = Query(False), app/api/routers/phones.py:80:@router.post("/add") app/api/routers/phones.py:81:async def add_phone(payload: PhoneIn, db: AsyncSession = Depends(get_db), app/api/routers/phones.py:97:@router.post("/import") app/api/routers/phones.py:98:async def import_phones(file: UploadFile = None, db: AsyncSession = Depends(get_db), app/api/routers/phones.py:164:@router.post("/{pid}/patch") app/api/routers/phones.py:165:async def patch_phone(pid: int, payload: PhonePatch, app/api/routers/phones.py:180:@router.post("/{pid}/delete") app/api/routers/phones.py:181:async def delete_phone(pid: int, db: AsyncSession = Depends(get_db), app/api/routers/phones.py:192:@router.post("/clear-all") app/api/routers/phones.py:193:async def clear_all_phones(db: AsyncSession = Depends(get_db), app/api/routers/suppression.py:21:def _norm_reason(r: str) -> str: app/api/routers/suppression.py:28:class SuppressionIn(BaseModel): app/api/routers/suppression.py:34:class BulkEmails(BaseModel): app/api/routers/suppression.py:39:class CheckEmails(BaseModel): app/api/routers/suppression.py:43:def _serialize(s: SuppressionEntry) -> dict: app/api/routers/suppression.py:54:@router.get("/list") app/api/routers/suppression.py:55:async def list_suppression(search: str = Query(""), app/api/routers/suppression.py:75:@router.post("/add") app/api/routers/suppression.py:76:async def add_suppression(payload: SuppressionIn, db: AsyncSession = Depends(get_db), app/api/routers/suppression.py:95:@router.post("/import") app/api/routers/suppression.py:96:async def import_suppression(file: UploadFile = None, app/api/routers/suppression.py:160:@router.post("/bulk") app/api/routers/suppression.py:161:async def bulk_add_suppression(payload: BulkEmails, db: AsyncSession = Depends(get_db), app/api/routers/suppression.py:180:@router.post("/check") app/api/routers/suppression.py:181:async def check_suppression(payload: CheckEmails, db: AsyncSession = Depends(get_db), app/api/routers/suppression.py:192:@router.post("/{sid}/delete") app/api/routers/suppression.py:193:async def delete_suppression(sid: int, db: AsyncSession = Depends(get_db), app/api/routers/suppression.py:206:@router.post("/clear-all") app/api/routers/suppression.py:207:async def clear_all_suppression(db: AsyncSession = Depends(get_db), app/api/routers/settings_router.py:19:class SettingIn(BaseModel): app/api/routers/settings_router.py:26:class BatchSettingsIn(BaseModel): app/api/routers/settings_router.py:70:def _validate_value(key: str, value) -> tuple: app/api/routers/settings_router.py:110:@router.get("/list") app/api/routers/settings_router.py:111:async def list_settings(db: AsyncSession = Depends(get_db), app/api/routers/settings_router.py:132:@router.post("/save") app/api/routers/settings_router.py:133:async def save_setting(payload: SettingIn, db: AsyncSession = Depends(get_db), app/api/routers/settings_router.py:155:@router.post("/save-batch") app/api/routers/settings_router.py:156:async def save_batch(payload: BatchSettingsIn, db: AsyncSession = Depends(get_db), app/api/routers/settings_router.py:186:@router.post("/reset") app/api/routers/settings_router.py:187:async def reset_setting(payload: SettingIn, db: AsyncSession = Depends(get_db), app/api/routers/settings_router.py:204:@router.post("/reset-all") app/api/routers/settings_router.py:205:async def reset_all_settings(db: AsyncSession = Depends(get_db), app/api/routers/logs.py:19:def _ser_attempt(a: SendAttempt, cr_id: int = None) -> dict: app/api/routers/logs.py:39:@router.get("/list")