/
artyuhovs
/
AIFeedBackTrainingBot
Обзор
Документация
Войти
/
artyuhovs
/
AIFeedBackTrainingBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/services/learner_content.py
79 строк
2 KB
Codex
Завершить архитектурное оздоровление и исправить итоги
15 июл 2026, 11:05
15 июл 2026, 11:05
c65f9a6
Код
Авторство
О чём код?
from __future__ import annotations import asyncio from dataclasses import dataclass from app.db.read_models import AnswerRecord, BestReviewRecord, BestWorkRecord from app.db.repositories import Repositories @dataclass(frozen=True) class FinalFeedbackContent: original: AnswerRecord | None best_work: BestWorkRecord | None best_answer: AnswerRecord | None best_review: BestReviewRecord | None correction: AnswerRecord | None class LearnerContentQuery: """Load learner answer content without exposing persistence calls to transport.""" def __init__(self, repository: Repositories) -> None: self.repository = repository async def assignment_answer( self, user_id: int, assignment_id: int, ) -> AnswerRecord | None: return await asyncio.to_thread( self.repository.assignments.latest_assignment_answer, user_id, assignment_id, ) async def correction_answer( self, user_id: int, assignment_id: int, ) -> AnswerRecord | None: return await asyncio.to_thread( self.repository.assignments.latest_correction_answer, user_id, assignment_id, ) async def final_feedback( self, user_id: int, assignment_id: int, stream_publication_id: int, ) -> FinalFeedbackContent: def load() -> FinalFeedbackContent: original = self.repository.assignments.latest_assignment_answer( user_id, assignment_id, ) best_work = self.repository.review_results.module_best_work(stream_publication_id) best_answer = None best_review = None if best_work is not None: best_answer = self.repository.assignments.latest_assignment_answer( best_work["telegram_user_id"], best_work["id"], ) best_review = self.repository.review_results.best_review_for_assignment(best_work["id"]) correction = self.repository.assignments.latest_correction_answer( user_id, assignment_id, ) return FinalFeedbackContent( original, best_work, best_answer, best_review, correction, ) return await asyncio.to_thread(load)