alabuga/backend/app/schemas/progress.py
2025-09-27 12:11:19 +03:00

60 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Pydantic-схемы для отображения прогресса по рангу."""
from __future__ import annotations
from pydantic import BaseModel, Field
class ProgressRank(BaseModel):
"""Краткое описание ранга, пригодное для отображения на дашборде."""
id: int
title: str
description: str
required_xp: int
class Config:
from_attributes = True
class ProgressXPMetrics(BaseModel):
"""Статистика по опыту: от базового значения до целевого порога."""
baseline: int = Field(description="Количество XP, с которого начинается текущий этап прогресса")
current: int = Field(description="Текущее значение XP пользователя")
target: int = Field(description="Порог XP, необходимый для следующего ранга")
remaining: int = Field(description="Сколько XP осталось набрать")
progress_percent: float = Field(description="Прогресс на отрезке от baseline до target в долях единицы")
class ProgressMissionRequirement(BaseModel):
"""Статус обязательной миссии для следующего ранга."""
mission_id: int
mission_title: str
is_completed: bool
class ProgressCompetencyRequirement(BaseModel):
"""Статус требования по компетенции."""
competency_id: int
competency_name: str
required_level: int
current_level: int
is_met: bool
class ProgressSnapshot(BaseModel):
"""Итоговая структура прогресса: XP, обязательные миссии и компетенции."""
current_rank: ProgressRank | None
next_rank: ProgressRank | None
xp: ProgressXPMetrics
mission_requirements: list[ProgressMissionRequirement]
competency_requirements: list[ProgressCompetencyRequirement]
completed_missions: int
total_missions: int
met_competencies: int
total_competencies: int