/
TurGG
/
AI-Assistant
Обзор
Документация
Войти
/
TurGG
/
AI-Assistant
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
models.py
131 строка
4 KB
molodoybishkek
Первая загрузка кода ИИ-агента.
03 мар 2026, 22:10
03 мар 2026, 22:10
15b5eb5
Код
Авторство
О чём код?
# =========================================================== # models.py — Модели данных (Data Classes) # =========================================================== # Типизированные модели для замены Dict[str, Any] # =========================================================== from dataclasses import dataclass, field from typing import Optional, List from datetime import datetime @dataclass class Test: """Модель теста.""" name: str score: int @dataclass class Event: """Модель мероприятия.""" name: str date: str attended: bool @dataclass class Project: """Модель проекта.""" name: str status: str points: int current_stage: str @dataclass class PendingAchievement: """Модель заявки на достижение.""" achievement_name: str description: str submitted_at: str status: str = "pending" rejection_reason: Optional[str] = None reviewed_at: Optional[str] = None @dataclass class User: """Модель пользователя.""" id: int name: str points: int team: Optional[str] = None is_team_lead: bool = False achievements: List[str] = field(default_factory=list) tests: List[Test] = field(default_factory=list) events: List[Event] = field(default_factory=list) projects: List[Project] = field(default_factory=list) pending_admin_review: List[PendingAchievement] = field(default_factory=list) def to_dict(self) -> dict: """Конвертация в словарь для JSON-сериализации.""" return { "id": self.id, "name": self.name, "team": self.team, "is_team_lead": self.is_team_lead, "points": self.points, "details": { "tests": [{"name": t.name, "score": t.score} for t in self.tests], "events": [{"name": e.name, "date": e.date, "attended": e.attended} for e in self.events], "projects": [ {"name": p.name, "status": p.status, "points": p.points, "current_stage": p.current_stage} for p in self.projects ], }, "achievements": self.achievements, "pending_admin_review": [ ( { "achievement_name": pa.achievement_name, "description": pa.description, "submitted_at": pa.submitted_at, "status": pa.status, **({"rejection_reason": pa.rejection_reason} if pa.rejection_reason else {}), **({"reviewed_at": pa.reviewed_at} if pa.reviewed_at else {}), } if hasattr(pa, "achievement_name") else pa # Уже dict ) for pa in self.pending_admin_review ], } @classmethod def from_dict(cls, data: dict) -> "User": """Создание модели из словаря.""" details = data.get("details", {}) return cls( id=data["id"], name=data["name"], points=data["points"], team=data.get("team"), is_team_lead=data.get("is_team_lead", False), achievements=data.get("achievements", []), tests=[Test(**t) for t in details.get("tests", [])], events=[Event(**e) for e in details.get("events", [])], projects=[Project(**p) for p in details.get("projects", [])], pending_admin_review=[ PendingAchievement(**pa) for pa in data.get("pending_admin_review", []) ], ) @dataclass class TeamStats: """Модель статистики команды.""" name: str members_count: int total_points: int average_points: float tests_score: int projects_score: int events_count: int @dataclass class AchievementInfo: """Модель информации о достижении.""" name: str count: int