45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
# -*- 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:
|
|
"""Проверить готовность задачи к подтверждению."""
|