Files
mokeeText/backend/routes/import_api.py
2026-07-15 16:08:17 +08:00

62 lines
2.0 KiB
Python

"""智能导入 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