feat:更新练习题接口

This commit is contained in:
2026-07-30 13:07:26 +08:00
parent 50a27323cc
commit 9c9ac3ab1c
9 changed files with 83 additions and 266 deletions

View File

@@ -1,9 +1,8 @@
from sqlalchemy import select, delete
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
from models.library import LibraryFile, LibraryFileQuestion
from schemas.library import LibraryFileRequest, LibraryFileResponse, QuestionResponse
from models.library import LibraryFile
from schemas.library import LibraryFileRequest, LibraryFileResponse
async def list_files(db: AsyncSession) -> list[LibraryFileResponse]:
@@ -20,7 +19,6 @@ async def list_files(db: AsyncSession) -> list[LibraryFileResponse]:
size=file.size,
content=file.content,
uploadTime=file.create_time.strftime("%Y-%m-%d %H:%M:%S"),
questions=[],
)
for file in files
]
@@ -28,7 +26,7 @@ async def list_files(db: AsyncSession) -> list[LibraryFileResponse]:
async def add_file(db: AsyncSession, data: LibraryFileRequest) -> bool:
"""
创建题库文件及其题目
创建题库文件
"""
file = LibraryFile(
subject=data.subject,
@@ -40,18 +38,6 @@ async def add_file(db: AsyncSession, data: LibraryFileRequest) -> bool:
)
db.add(file)
await db.flush()
for q in data.questions:
question = LibraryFileQuestion(
library_file_id=file.id,
type=q.type,
question=q.question,
options=q.options,
answer=q.answer
)
db.add(question)
await db.commit()
return True
@@ -59,7 +45,7 @@ async def add_file(db: AsyncSession, data: LibraryFileRequest) -> bool:
async def edit_file(db: AsyncSession, file_id: int, data: LibraryFileRequest) -> bool:
"""
编辑题库文件及其题目
编辑题库文件
"""
result = await db.execute(
@@ -76,33 +62,13 @@ async def edit_file(db: AsyncSession, file_id: int, data: LibraryFileRequest) ->
file.type = data.type
file.content = data.content
await db.execute(
delete(LibraryFileQuestion)
.where(LibraryFileQuestion.library_file_id == file.id)
)
# 4. 插入新题目
for q in data.questions:
question = LibraryFileQuestion(
library_file_id=file.id,
type=q.type,
question=q.question,
options=q.options,
answer=q.answer,
)
db.add(question)
await db.commit()
return True
async def get_file(db: AsyncSession, file_id: int) -> LibraryFileResponse:
stmt = (
select(LibraryFile)
.options(selectinload(LibraryFile.questions))
.where(LibraryFile.id == file_id)
)
stmt = (select(LibraryFile).where(LibraryFile.id == file_id))
result = await db.execute(stmt)
file = result.scalar_one_or_none()
@@ -115,14 +81,4 @@ async def get_file(db: AsyncSession, file_id: int) -> LibraryFileResponse:
size=file.size,
content=file.content,
uploadTime=file.create_time.strftime("%Y-%m-%d %H:%M:%S"),
questions=[
QuestionResponse(
id=q.id,
type=q.type,
question=q.question,
options=q.options,
answer=q.answer
)
for q in file.questions
],
)