77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
"""Схемы рангов."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from datetime import datetime
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class RankBase(BaseModel):
|
||
"""Базовая информация о ранге."""
|
||
|
||
id: int
|
||
title: str
|
||
description: str
|
||
required_xp: int
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
class RankRequirementMission(BaseModel):
|
||
"""Обязательная миссия."""
|
||
|
||
mission_id: int
|
||
mission_title: str
|
||
|
||
|
||
class RankRequirementCompetency(BaseModel):
|
||
"""Требование к компетенции."""
|
||
|
||
competency_id: int
|
||
competency_name: str
|
||
required_level: int
|
||
|
||
|
||
class RankDetailed(RankBase):
|
||
"""Полный ранг со списком условий."""
|
||
|
||
mission_requirements: list[RankRequirementMission]
|
||
competency_requirements: list[RankRequirementCompetency]
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
|
||
class RankRequirementMissionInput(BaseModel):
|
||
"""Входная схема обязательной миссии."""
|
||
|
||
mission_id: int
|
||
|
||
|
||
class RankRequirementCompetencyInput(BaseModel):
|
||
"""Входная схема требования к компетенции."""
|
||
|
||
competency_id: int
|
||
required_level: int = Field(ge=0)
|
||
|
||
|
||
class RankCreate(BaseModel):
|
||
"""Создание нового ранга."""
|
||
|
||
title: str
|
||
description: str
|
||
required_xp: int = Field(ge=0)
|
||
mission_ids: list[int] = []
|
||
competency_requirements: list[RankRequirementCompetencyInput] = []
|
||
|
||
|
||
class RankUpdate(BaseModel):
|
||
"""Обновление существующего ранга."""
|
||
|
||
title: str
|
||
description: str
|
||
required_xp: int = Field(ge=0)
|
||
mission_ids: list[int] = []
|
||
competency_requirements: list[RankRequirementCompetencyInput] = []
|