diff --git a/src/govoplan_core/core/postbox.py b/src/govoplan_core/core/postbox.py index 3b11e27..06a3ffc 100644 --- a/src/govoplan_core/core/postbox.py +++ b/src/govoplan_core/core/postbox.py @@ -172,6 +172,8 @@ class PostboxDirectoryEntryRef: holder_count: int = 0 vacant: bool = True access: PostboxAccessDecisionRef | None = None + resource_revision: int = 1 + etag: str | None = None @dataclass(frozen=True, slots=True) @@ -213,6 +215,8 @@ class PostboxMessageRef: producer_module: str | None = None producer_resource_type: str | None = None producer_resource_id: str | None = None + in_reply_to_message_id: str | None = None + replaces_message_id: str | None = None encryption_profile: str = "plaintext_v1" key_epoch: int = 1 ciphertext_ref: str | None = None @@ -222,6 +226,17 @@ class PostboxMessageRef: metadata: Mapping[str, object] = field(default_factory=dict) +@dataclass(frozen=True, slots=True) +class PostboxMessageAuthoringRequest: + idempotency_key: str + subject: str + body_text: str | None = None + classification: str = "internal" + participants: tuple[PostboxParticipantRef, ...] = () + attachments: tuple[PostboxAttachmentRef, ...] = () + metadata: Mapping[str, object] = field(default_factory=dict) + + @dataclass(frozen=True, slots=True) class PostboxDeliveryReceiptSummaryRef: delivery_id: str @@ -380,6 +395,28 @@ class PostboxMessagesProvider(Protocol): ) -> PostboxMessageRef: ... + def create_message( + self, + session: object, + *, + tenant_id: str, + postbox_id: str, + actor: PostboxActorRef, + request: PostboxMessageAuthoringRequest, + ) -> PostboxMessageRef: + ... + + def reply_to_message( + self, + session: object, + *, + tenant_id: str, + message_id: str, + actor: PostboxActorRef, + request: PostboxMessageAuthoringRequest, + ) -> PostboxMessageRef: + ... + @runtime_checkable class PostboxDeliveryProvider(Protocol): diff --git a/tests/test_postbox_contract.py b/tests/test_postbox_contract.py index d55e45a..48db84b 100644 --- a/tests/test_postbox_contract.py +++ b/tests/test_postbox_contract.py @@ -63,6 +63,14 @@ class _PostboxProvider: del session, tenant_id, message_id, actor, state return None + def create_message(self, session, *, tenant_id, postbox_id, actor, request): + del session, tenant_id, postbox_id, actor, request + return None + + def reply_to_message(self, session, *, tenant_id, message_id, actor, request): + del session, tenant_id, message_id, actor, request + return None + def deliver(self, session, request): del session, request return None