# -*- coding: utf-8 -*- # hub/ticket/state/ticket_state_api.py """Публичный state API модуля Ticket.""" from __future__ import annotations from typing import Any, Mapping, Protocol, Sequence from domain import TicketTaskSnapshot class TicketStateApi(Protocol): """Контракт для канонического runtime-state и persistence-контура Ticket.""" def load(self) -> None: """Загрузить состояние из репозитория.""" def list_tasks(self) -> Sequence[TicketTaskSnapshot]: """Вернуть все известные задачи.""" def list_active_tasks(self) -> Sequence[TicketTaskSnapshot]: """Вернуть активные задачи.""" def list_archived_tasks(self) -> Sequence[TicketTaskSnapshot]: """Вернуть архивные задачи.""" def get_task(self, task_id: int) -> TicketTaskSnapshot | None: """Вернуть задачу по идентификатору.""" def upsert_task(self, task: TicketTaskSnapshot) -> None: """Создать или обновить задачу в каноническом состоянии.""" def update_task(self, task_data: Mapping[str, Any]) -> TicketTaskSnapshot | None: """Обновить задачу по словарю совместимых полей.""" def remove_task(self, task_id: int) -> None: """Удалить задачу из состояния.""" def sign_report(self, task_id: int, report_type: str) -> None: """Зафиксировать подписание отчёта.""" def can_advance_to_confirmation(self, task_id: int) -> bool: """Проверить готовность задачи к подтверждению."""