Files
getDomain/domain-api/app/api/routes/juming.py
Your Name ebf632e651 first
2026-04-16 21:35:47 +08:00

94 lines
3.4 KiB
Python

from fastapi import APIRouter, File, HTTPException, UploadFile
from app.schemas.common import ApiResponse
from app.services.juming_service import (
get_juming_preferences,
get_juming_status,
login_jucha_with_juming_cookie,
login_juming,
update_juming_preferences,
upload_juming_cookie,
)
from app.services.juming_task_service import create_juming_task, list_juming_tasks, request_stop_juming_task, retry_juming_task
router = APIRouter(tags=["juming"])
@router.get("/juming/status", response_model=ApiResponse)
def juming_status() -> ApiResponse:
return ApiResponse(data=get_juming_status())
@router.get("/juming/preferences", response_model=ApiResponse)
def juming_preferences() -> ApiResponse:
return ApiResponse(data=get_juming_preferences())
@router.put("/juming/preferences", response_model=ApiResponse)
def update_juming_preferences_route(payload: dict) -> ApiResponse:
try:
data = update_juming_preferences(payload)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚名采集偏好已保存", data=data)
@router.post("/juming/crawl", response_model=ApiResponse)
def juming_crawl(payload: dict) -> ApiResponse:
try:
data = create_juming_task(payload)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚名采集任务已创建", data=data)
@router.get("/juming/tasks", response_model=ApiResponse)
def juming_tasks() -> ApiResponse:
return ApiResponse(data=list_juming_tasks())
@router.post("/juming/tasks/{task_id}/retry", response_model=ApiResponse)
def juming_task_retry(task_id: str) -> ApiResponse:
try:
data = retry_juming_task(task_id)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚名采集任务已重新加入队列", data=data)
@router.post("/juming/tasks/{task_id}/stop", response_model=ApiResponse)
def juming_task_stop(task_id: str) -> ApiResponse:
try:
data = request_stop_juming_task(task_id)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚名采集任务已发送停止请求", data=data)
@router.post("/juming/login", response_model=ApiResponse)
def juming_login(payload: dict) -> ApiResponse:
try:
data = login_juming(str(payload.get("email") or ""), str(payload.get("password") or ""))
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚名登录成功", data=data)
@router.post("/juming/jucha-login", response_model=ApiResponse)
def juming_jucha_login() -> ApiResponse:
try:
data = login_jucha_with_juming_cookie()
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚查联名登录成功", data=data)
@router.post("/juming/cookie/upload", response_model=ApiResponse)
async def juming_cookie_upload(file: UploadFile = File(...)) -> ApiResponse:
content = await file.read()
try:
data = upload_juming_cookie(file.filename or "juming_cookies.pkl", content)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return ApiResponse(message="聚名 Cookie 已上传", data=data)