feat:增加知识库文件字段

This commit is contained in:
2026-07-28 22:58:32 +08:00
parent 0e9bde9a14
commit 613eed541f
7 changed files with 93 additions and 43 deletions

View File

@@ -1,4 +1,4 @@
from sqlalchemy import select
from sqlalchemy import select, delete
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
@@ -6,6 +6,26 @@ from models.library import LibraryFile, LibraryFileQuestion
from schemas.library import LibraryFileRequest, LibraryFileResponse, QuestionResponse
async def list_files(db: AsyncSession) -> list[LibraryFileResponse]:
stmt = select(LibraryFile).order_by(LibraryFile.create_time.desc())
files = (await db.execute(stmt)).scalars().all()
return [
LibraryFileResponse(
id=file.id,
subject=file.subject,
module=file.module,
name=file.name,
type=file.type,
size=file.size,
content=file.content,
uploadTime=file.create_time.strftime("%Y-%m-%d %H:%M:%S"),
questions=[],
)
for file in files
]
async def add_file(db: AsyncSession, data: LibraryFileRequest) -> bool:
"""
创建题库文件及其题目
@@ -15,7 +35,8 @@ async def add_file(db: AsyncSession, data: LibraryFileRequest) -> bool:
module=data.module,
name=data.name,
size=data.size,
type=data.type
type=data.type,
content=data.content,
)
db.add(file)
@@ -36,6 +57,46 @@ async def add_file(db: AsyncSession, data: LibraryFileRequest) -> bool:
return True
async def edit_file(db: AsyncSession, file_id: int, data: LibraryFileRequest) -> bool:
"""
编辑题库文件及其题目
"""
result = await db.execute(
select(LibraryFile).where(LibraryFile.id == file_id)
)
file = result.scalar_one_or_none()
if not file:
return False
file.subject = data.subject
file.module = data.module
file.name = data.name
file.size = data.size
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)
@@ -52,6 +113,7 @@ async def get_file(db: AsyncSession, file_id: int) -> LibraryFileResponse:
name=file.name,
type=file.type,
size=file.size,
content=file.content,
uploadTime=file.create_time.strftime("%Y-%m-%d %H:%M:%S"),
questions=[
QuestionResponse(
@@ -64,22 +126,3 @@ async def get_file(db: AsyncSession, file_id: int) -> LibraryFileResponse:
for q in file.questions
],
)
async def list_files(db: AsyncSession) -> list[LibraryFileResponse]:
stmt = select(LibraryFile).order_by(LibraryFile.create_time.desc())
files = (await db.execute(stmt)).scalars().all()
return [
LibraryFileResponse(
id=f.id,
subject=f.subject,
module=f.module,
name=f.name,
type=f.type,
size=f.size,
uploadTime=f.create_time.strftime("%Y-%m-%d %H:%M:%S"),
questions=[],
)
for f in files
]