feat:增加AI生成资料接口
This commit is contained in:
9
routers/__init__.py
Normal file
9
routers/__init__.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from .library import router as library_router
|
||||
from .practice import router as practice_router
|
||||
from .mistake import router as mistake_router
|
||||
|
||||
routers = [
|
||||
library_router,
|
||||
practice_router,
|
||||
mistake_router,
|
||||
]
|
||||
55
routers/library.py
Normal file
55
routers/library.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from typing import List
|
||||
from fastapi import APIRouter, Depends, File, Form, UploadFile
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from starlette.responses import StreamingResponse
|
||||
|
||||
from database import get_db
|
||||
from schemas.library import LibraryFileRequest, LibraryFileResponse
|
||||
from schemas.agent import QueryQuestionRequest, QueryKnowledgeRequest
|
||||
from service import library_service, agent_service
|
||||
from storage import upload_rustfs
|
||||
from ocr import ocr_from_url
|
||||
|
||||
router = APIRouter(prefix="/library", tags=["Library"])
|
||||
|
||||
|
||||
@router.post("/upload")
|
||||
def upload(file: UploadFile = File(...), filename: str = Form(...)):
|
||||
url = upload_rustfs(file.file, filename)
|
||||
return ocr_from_url(url)
|
||||
|
||||
|
||||
@router.post("/question")
|
||||
def generate_question(query: QueryQuestionRequest):
|
||||
return StreamingResponse(
|
||||
agent_service.query_question_agent(query),
|
||||
media_type="text/event-stream",
|
||||
)
|
||||
|
||||
|
||||
@router.post("/knowledge")
|
||||
def generate_knowledge(query: QueryKnowledgeRequest):
|
||||
return StreamingResponse(
|
||||
agent_service.query_knowledge_agent(query),
|
||||
media_type="text/event-stream",
|
||||
)
|
||||
|
||||
|
||||
@router.get("/files", response_model=List[LibraryFileResponse])
|
||||
async def list_files(db: AsyncSession = Depends(get_db)):
|
||||
return await library_service.list_files(db)
|
||||
|
||||
|
||||
@router.get("/files/{file_id}", response_model=LibraryFileResponse)
|
||||
async def get_file(file_id: int, db: AsyncSession = Depends(get_db)):
|
||||
return await library_service.get_file(db, file_id)
|
||||
|
||||
|
||||
@router.post("/files", response_model=bool)
|
||||
async def add_file(data: LibraryFileRequest, db: AsyncSession = Depends(get_db)):
|
||||
return await library_service.add_file(db, data)
|
||||
|
||||
|
||||
@router.put("/files/{file_id}", response_model=bool)
|
||||
async def edit_file(file_id: int, data: LibraryFileRequest, db: AsyncSession = Depends(get_db)):
|
||||
return await library_service.edit_file(db, file_id, data)
|
||||
24
routers/mistake.py
Normal file
24
routers/mistake.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from typing import List
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database import get_db
|
||||
from schemas.mistake import MistakeResponse, MistakeRequest
|
||||
from service import mistake_service
|
||||
|
||||
router = APIRouter(prefix="/mistake", tags=["Mistake"])
|
||||
|
||||
|
||||
@router.get("", response_model=List[MistakeResponse])
|
||||
async def list_mistakes(db: AsyncSession = Depends(get_db)):
|
||||
return await mistake_service.list_mistakes(db)
|
||||
|
||||
|
||||
@router.post("", response_model=bool)
|
||||
async def add_mistakes(data: list[MistakeRequest], db: AsyncSession = Depends(get_db)):
|
||||
return await mistake_service.add_mistakes(db, data)
|
||||
|
||||
|
||||
@router.delete("/{mistake_id}", response_model=bool)
|
||||
async def remove_mistake(mistake_id: int, db: AsyncSession = Depends(get_db)):
|
||||
return await mistake_service.remove_mistake(db, mistake_id)
|
||||
19
routers/practice.py
Normal file
19
routers/practice.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from typing import List
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database import get_db
|
||||
from schemas.practice import PracticeRecordResponse, PracticeRecordRequest
|
||||
from service import practice_service
|
||||
|
||||
router = APIRouter(prefix="/practice", tags=["Practice"])
|
||||
|
||||
|
||||
@router.get("/record/{user_id}", response_model=List[PracticeRecordResponse])
|
||||
async def get_record(user_id: int, db: AsyncSession = Depends(get_db)):
|
||||
return await practice_service.get_record(db, user_id)
|
||||
|
||||
|
||||
@router.post("/record", response_model=bool)
|
||||
async def add_record(data: PracticeRecordRequest, db: AsyncSession = Depends(get_db), ):
|
||||
return await practice_service.add_record(db, data)
|
||||
Reference in New Issue
Block a user