/
gr.ev.vl
/
TestGen
Обзор
Документация
Войти
/
gr.ev.vl
/
TestGen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/testgen/api/v1/misconceptions.py
144 строки
5 KB
gr.ev.vl
1
06 июн 2026, 18:07
06 июн 2026, 18:07
af65c24
Код
Авторство
О чём код?
""" Эндпоинты управления учебными заблуждениями. """ from typing import Annotated from uuid import UUID from fastapi import APIRouter, Depends, Query from pydantic import BaseModel from ..deps import get_db, get_current_active_user, require_teacher from ...domain.models.user import User from ...services.misconception import MisconceptionService router = APIRouter() class MisconceptionResponse(BaseModel): id: str subtopic_id: str misconception_text: str reason_explanation: str source: str status: str created_at: str | None = None model_config = {"from_attributes": True} class MisconceptionListResponse(BaseModel): items: list[MisconceptionResponse] total: int class AcceptMisconceptionsRequest(BaseModel): ids: list[UUID] class UpdateMisconceptionRequest(BaseModel): misconception_text: str | None = None reason_explanation: str | None = None # ============================================================================= # ВАЖНО: GET / должен быть ПЕРВЫМ маршрутом # ============================================================================= @router.get("", response_model=MisconceptionListResponse) @router.get("/", response_model=MisconceptionListResponse) async def list_misconceptions( subtopic_id: UUID = Query(None), status: str = Query(None), limit: int = Query(50, ge=1, le=200), offset: int = Query(0, ge=0), db=Depends(get_db), current_user: User = Depends(get_current_active_user), ) -> MisconceptionListResponse: """Получить список заблуждений с пагинацией.""" service = MisconceptionService(db) if subtopic_id: misconceptions = await service.list_by_subtopic(subtopic_id, status) else: misconceptions = [] return MisconceptionListResponse( items=[ MisconceptionResponse( id=str(m.id), subtopic_id=str(m.subtopic_id), misconception_text=m.misconception_text, reason_explanation=m.reason_explanation, source=m.source, status=m.status, created_at=m.created_at.isoformat() if m.created_at else None, ) for m in misconceptions ], total=len(misconceptions), ) @router.post("/accept", response_model=dict) async def accept_misconceptions( request: AcceptMisconceptionsRequest, db=Depends(get_db), current_user: User = Depends(require_teacher), ): """Принять заблуждения.""" service = MisconceptionService(db) await service.accept_misconceptions(request.ids, current_user.id) return {"message": f"Принято заблуждений: {len(request.ids)}"} @router.post("/reject", response_model=dict) async def reject_misconceptions( request: AcceptMisconceptionsRequest, db=Depends(get_db), current_user: User = Depends(require_teacher), ): """Отклонить заблуждения.""" service = MisconceptionService(db) await service.reject_misconceptions(request.ids, current_user.id) return {"message": f"Отклонено заблуждений: {len(request.ids)}"} @router.get("/{misconception_id}", response_model=MisconceptionResponse) async def get_misconception( misconception_id: UUID, db=Depends(get_db), current_user: User = Depends(get_current_active_user), ) -> MisconceptionResponse: """Получить заблуждение по ID.""" service = MisconceptionService(db) m = await service.get_misconception(misconception_id) return MisconceptionResponse( id=str(m.id), subtopic_id=str(m.subtopic_id), misconception_text=m.misconception_text, reason_explanation=m.reason_explanation, source=m.source, status=m.status, created_at=m.created_at.isoformat() if m.created_at else None, ) @router.put("/{misconception_id}", response_model=MisconceptionResponse) async def update_misconception( misconception_id: UUID, request: UpdateMisconceptionRequest, db=Depends(get_db), current_user: User = Depends(require_teacher), ) -> MisconceptionResponse: """Обновить заблуждение.""" service = MisconceptionService(db) updates = {k: v for k, v in request.model_dump().items() if v is not None} m = await service.update_misconception(misconception_id, current_user.id, **updates) return MisconceptionResponse( id=str(m.id), subtopic_id=str(m.subtopic_id), misconception_text=m.misconception_text, reason_explanation=m.reason_explanation, source=m.source, status=m.status, created_at=m.created_at.isoformat() if m.created_at else None, )