feat:更新数据表结构
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user