mirror of
https://github.com/langgenius/dify.git
synced 2026-11-10 21:35:45 +08:00
65 lines
2.8 KiB
Python
65 lines
2.8 KiB
Python
"""Mutate owned conversations and dispatch cleanup after persistence commits."""
|
|
|
|
from typing import Protocol
|
|
|
|
from machinery.context import RequestContext
|
|
from services.entities.conversation_entities import ConsoleConversationKind, ConversationDeletion, ConversationRef
|
|
|
|
|
|
class ConversationCommandStore(Protocol):
|
|
def mark_console_read(
|
|
self, context: RequestContext, app_id: str, conversation_id: str, *, kind: ConsoleConversationKind
|
|
) -> None: ...
|
|
|
|
def delete_console(
|
|
self, context: RequestContext, app_id: str, conversation_id: str, *, kind: ConsoleConversationKind
|
|
) -> ConversationDeletion:
|
|
"""Delete the account's Console conversation within the admitted workspace."""
|
|
...
|
|
|
|
def delete(self, *, ref: ConversationRef) -> ConversationDeletion:
|
|
"""Commit soft deletion and workspace retirement before returning cleanup data."""
|
|
...
|
|
|
|
def set_pinned(self, *, ref: ConversationRef, is_pinned: bool) -> None:
|
|
"""Set the caller's pin; removing an absent pin succeeds."""
|
|
...
|
|
|
|
|
|
class ConversationCleanup(Protocol):
|
|
def __call__(self, *, tenant_id: str, conversation_id: str, retired_workspace_ids: tuple[str, ...]) -> None: ...
|
|
|
|
|
|
class ConversationCommandService:
|
|
def __init__(self, *, conversations: ConversationCommandStore, enqueue_delete_cleanup: ConversationCleanup) -> None:
|
|
self._conversations: ConversationCommandStore = conversations
|
|
self._enqueue_delete_cleanup: ConversationCleanup = enqueue_delete_cleanup
|
|
|
|
def mark_console_read(
|
|
self, context: RequestContext, app_id: str, conversation_id: str, *, kind: ConsoleConversationKind
|
|
) -> None:
|
|
"""Record the legacy Console read receipt after detail rendering succeeds."""
|
|
self._conversations.mark_console_read(context, app_id, conversation_id, kind=kind)
|
|
|
|
def delete_console(
|
|
self, context: RequestContext, app_id: str, conversation_id: str, *, kind: ConsoleConversationKind
|
|
) -> None:
|
|
deleted = self._conversations.delete_console(context, app_id, conversation_id, kind=kind)
|
|
self._enqueue_delete_cleanup(
|
|
tenant_id=deleted.tenant_id,
|
|
conversation_id=deleted.conversation_id,
|
|
retired_workspace_ids=deleted.retired_workspace_ids,
|
|
)
|
|
|
|
def delete(self, *, ref: ConversationRef) -> None:
|
|
deleted = self._conversations.delete(ref=ref)
|
|
# The retirement and soft-delete commit must precede physical cleanup.
|
|
self._enqueue_delete_cleanup(
|
|
tenant_id=deleted.tenant_id,
|
|
conversation_id=deleted.conversation_id,
|
|
retired_workspace_ids=deleted.retired_workspace_ids,
|
|
)
|
|
|
|
def set_pinned(self, *, ref: ConversationRef, is_pinned: bool) -> None:
|
|
self._conversations.set_pinned(ref=ref, is_pinned=is_pinned)
|