research_history.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. """
  2. 研究历史API路由
  3. """
  4. from fastapi import APIRouter, Depends, HTTPException, status
  5. from sqlalchemy.orm import Session
  6. from pydantic import BaseModel
  7. from typing import List, Dict, Any, Optional
  8. from datetime import datetime
  9. from backend.core.database import get_db
  10. from backend.core.models import User, ResearchHistory
  11. from backend.core.auth import get_current_user
  12. router = APIRouter(tags=["research"], prefix="/research-history")
  13. class ResearchHistoryCreate(BaseModel):
  14. title: str
  15. research_intent: str
  16. keywords: List[str]
  17. directions: List[Dict[str, Any]]
  18. papers: List[Dict[str, Any]]
  19. class ResearchHistoryResponse(BaseModel):
  20. id: int
  21. title: str
  22. research_intent: str
  23. keywords: List[str]
  24. directions: List[Dict[str, Any]]
  25. papers: List[Dict[str, Any]]
  26. created_at: datetime
  27. updated_at: datetime
  28. class Config:
  29. orm_mode = True
  30. class ResearchHistorySummary(BaseModel):
  31. id: int
  32. title: str
  33. created_at: datetime
  34. updated_at: datetime
  35. class Config:
  36. orm_mode = True
  37. @router.post("/", response_model=ResearchHistoryResponse)
  38. async def create_research_history(
  39. research_data: ResearchHistoryCreate,
  40. current_user: User = Depends(get_current_user),
  41. db: Session = Depends(get_db)
  42. ):
  43. """创建新的研究历史"""
  44. research = ResearchHistory(
  45. user_id=current_user.id,
  46. title=research_data.title,
  47. research_intent=research_data.research_intent,
  48. keywords=research_data.keywords,
  49. directions=research_data.directions,
  50. papers=research_data.papers
  51. )
  52. db.add(research)
  53. db.commit()
  54. db.refresh(research)
  55. return research
  56. @router.get("/", response_model=List[ResearchHistorySummary])
  57. async def get_research_histories(
  58. current_user: User = Depends(get_current_user),
  59. db: Session = Depends(get_db)
  60. ):
  61. """获取用户的所有研究历史摘要"""
  62. researches = db.query(ResearchHistory)\
  63. .filter(ResearchHistory.user_id == current_user.id)\
  64. .order_by(ResearchHistory.updated_at.desc())\
  65. .all()
  66. return researches
  67. @router.get("/{research_id}", response_model=ResearchHistoryResponse)
  68. async def get_research_history(
  69. research_id: int,
  70. current_user: User = Depends(get_current_user),
  71. db: Session = Depends(get_db)
  72. ):
  73. """获取特定研究历史的详情"""
  74. research = db.query(ResearchHistory)\
  75. .filter(ResearchHistory.id == research_id, ResearchHistory.user_id == current_user.id)\
  76. .first()
  77. if not research:
  78. raise HTTPException(
  79. status_code=status.HTTP_404_NOT_FOUND,
  80. detail="研究历史不存在或无权访问"
  81. )
  82. return research
  83. @router.delete("/{research_id}")
  84. async def delete_research_history(
  85. research_id: int,
  86. current_user: User = Depends(get_current_user),
  87. db: Session = Depends(get_db)
  88. ):
  89. """删除研究历史"""
  90. research = db.query(ResearchHistory)\
  91. .filter(ResearchHistory.id == research_id, ResearchHistory.user_id == current_user.id)\
  92. .first()
  93. if not research:
  94. raise HTTPException(
  95. status_code=status.HTTP_404_NOT_FOUND,
  96. detail="研究历史不存在或无权访问"
  97. )
  98. db.delete(research)
  99. db.commit()
  100. return {"message": "研究历史已删除"}