diff --git a/shvatka/core/models/dto/action/keys.py b/shvatka/core/models/dto/action/keys.py index 79164231..aeb3f545 100644 --- a/shvatka/core/models/dto/action/keys.py +++ b/shvatka/core/models/dto/action/keys.py @@ -3,6 +3,7 @@ from typing import Literal from shvatka.core.models import enums +from shvatka.core.utils.input_validation import is_key_valid from . import StateHolder from .decisions import NotImplementedActionDecision from .interface import ( @@ -23,6 +24,12 @@ class BonusKey: text: SHKey bonus_minutes: float + def __post_init__(self): + if not is_key_valid(self.text): + raise ValueError + if not (-600 < self.bonus_minutes < 60): + raise ValueError("bonus out of available range") + def __eq__(self, other: object) -> bool: if not isinstance(other, BonusKey): return NotImplemented diff --git a/shvatka/tgbot/dialogs/level_scn/handlers.py b/shvatka/tgbot/dialogs/level_scn/handlers.py index 5ad890f5..2ca1650b 100644 --- a/shvatka/tgbot/dialogs/level_scn/handlers.py +++ b/shvatka/tgbot/dialogs/level_scn/handlers.py @@ -13,7 +13,6 @@ is_multiple_keys_normal, normalize_key, validate_level_id, - is_key_valid, ) from shvatka.infrastructure.db.dao.holder import HolderDao from shvatka.tgbot import states @@ -70,17 +69,12 @@ async def on_correct_keys(m: Message, dialog_: Any, manager: DialogManager, keys await manager.done({"keys": keys}) -def convert_bonus_keys(text: str) -> list[shvatka.core.models.dto.action.keys.BonusKey]: +def convert_bonus_keys(text: str) -> list[action.BonusKey]: result = [] for key_str in text.splitlines(): key, bonus = key_str.split(maxsplit=1) - if not is_key_valid(key): - raise ValueError - parsed_bonus = float(bonus) - if not (-600 < parsed_bonus < 60): - raise ValueError("bonus out of available range") - parsed_key = shvatka.core.models.dto.action.keys.BonusKey( - text=key, bonus_minutes=parsed_bonus + parsed_key = action.BonusKey( + text=key, bonus_minutes=float(bonus) ) result.append(parsed_key) return result