feat:更新数据表结构

This commit is contained in:
2026-08-09 14:02:20 +08:00
parent 0760f53cc6
commit 2f4fa66190
15 changed files with 270 additions and 211 deletions

View File

@@ -1,47 +1,67 @@
from sqlalchemy import select, delete
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from models.library import Mistake
from models.library import Mistake, Subject
from schemas.mistake import MistakeResponse, MistakeRequest
from service import subject_service
async def list_mistakes(db: AsyncSession) -> list[MistakeResponse]:
stmt = select(Mistake).order_by(Mistake.id.desc())
mistakes = (await db.execute(stmt)).scalars().all()
async def list_mistakes(subject: str, db: AsyncSession) -> list[MistakeResponse]:
subject_id = await subject_service.get_subject_by_name(db, subject)
stmt = (
select(Mistake)
.options(joinedload(Mistake.subject))
.where(Mistake.subject_id == subject_id)
.order_by(Mistake.id.desc())
)
mistakes = (await db.execute(stmt)).scalars().unique().all()
return [
MistakeResponse(
id=mistake.id,
subject=mistake.subject,
module=mistake.module,
name=mistake.name,
type=mistake.type,
question=mistake.question,
options=mistake.options,
answer=mistake.answer
answer=mistake.answer,
)
for mistake in mistakes
]
async def add_mistakes(db: AsyncSession, data: list[MistakeRequest]):
db.add_all(
[
Mistake(
subject=item.subject,
module=item.module,
name=item.name,
type=item.type,
question=item.question,
options=item.options,
answer=item.answer,
)
for item in data
]
)
async def add_mistakes(db: AsyncSession, subject: str, data: list[MistakeRequest]):
subject_id = await subject_service.get_subject_by_name(db, subject)
await db.commit()
return True
subject = (
await db.execute(
select(Subject).where(Subject.id == subject_id)
)
).scalar_one_or_none()
if not subject:
raise ValueError("Subject not found")
mistakes = [
Mistake(
subject_id=subject_id,
type=item.type,
question=item.question,
options=item.options,
answer=item.answer,
)
for item in data
]
try:
db.add_all(mistakes)
await db.flush()
await db.commit()
return True
except SQLAlchemyError:
await db.rollback()
raise
async def remove_mistake(db: AsyncSession, mistake_id: int) -> bool: