"""智能导入 API — 文本解析与匹配""" from fastapi import APIRouter, Depends, Request from sqlalchemy.orm import Session, joinedload from models import get_db, Website from middleware.user_context import UserContext from urllib.parse import urlparse router = APIRouter(prefix="/api/import", tags=["智能导入"]) @router.post("/parse") def parse_import_text(data: dict, db: Session = Depends(get_db), request: Request = None): """解析粘贴的文本,返回结构化结果 + 匹配信息""" user_id = UserContext.get_user_id(request) text = data.get("text", "").strip() if not text: return {"ok": False, "error": "文本为空"} lines = [l.strip() for l in text.split("\n") if l.strip()] if len(lines) < 3: return {"ok": False, "error": "至少需要 3 行:网址+网站名、账号、密码"} # 解析首行: 网址 + 空格 + 网站名 first_line = lines[0] space_idx = first_line.find(" ") if space_idx > 0: url = first_line[:space_idx].strip() site_name = first_line[space_idx + 1:].strip() else: url = first_line try: site_name = urlparse(url).hostname or url except Exception: site_name = url result = { "ok": True, "url": url, "site_name": site_name, "username": lines[1] if len(lines) > 1 else "", "password": lines[2] if len(lines) > 2 else "", "remark": lines[3] if len(lines) > 3 else "", } # 匹配已有网站(仅当前用户) existing = db.query(Website).options(joinedload(Website.accounts)).filter( Website.url == url, Website.created_by == user_id ).first() if existing: result["matched_site"] = { "id": existing.id, "name": existing.name, "folder_id": existing.folder_id, "account_count": len(existing.accounts), } result["action"] = "append" else: result["matched_site"] = None result["action"] = "create" return result