nexus-5/core/graphql/inputs/messaging.py
2026-01-26 11:09:40 -05:00

76 lines
2.0 KiB
Python

from typing import List, Optional
import strawberry
from strawberry.relay import GlobalID
@strawberry.input
class ConversationInput:
"""Input for creating a new conversation"""
subject: str
conversation_type: str # DIRECT, GROUP, SUPPORT
participant_ids: List[GlobalID] # List of TeamProfile or CustomerProfile IDs
entity_type: Optional[str] = None # e.g., "Project", "Service", "Account"
entity_id: Optional[GlobalID] = None # UUID of the entity
metadata: Optional[str] = None # JSON string
@strawberry.input
class ConversationUpdateInput:
"""Input for updating a conversation"""
id: GlobalID
subject: Optional[str] = None
is_archived: Optional[bool] = None
metadata: Optional[str] = None
@strawberry.input
class MessageInput:
"""Input for sending a new message"""
conversation_id: GlobalID
body: str
reply_to_id: Optional[GlobalID] = None # For threading
attachments: Optional[str] = None # JSON string with attachment metadata
metadata: Optional[str] = None # JSON string
@strawberry.input
class MessageUpdateInput:
"""Input for updating a message (limited fields)"""
id: GlobalID
body: str
attachments: Optional[str] = None # JSON string with attachment metadata
@strawberry.input
class AddParticipantInput:
"""Input for adding a participant to a conversation"""
conversation_id: GlobalID
participant_id: GlobalID # TeamProfile or CustomerProfile ID
@strawberry.input
class RemoveParticipantInput:
"""Input for removing a participant from a conversation"""
conversation_id: GlobalID
participant_id: GlobalID
@strawberry.input
class MarkAsReadInput:
"""Input for marking messages as read"""
conversation_id: GlobalID
@strawberry.input
class ArchiveConversationInput:
"""Input for archiving/unarchiving a conversation"""
conversation_id: GlobalID
is_archived: bool
@strawberry.input
class MuteConversationInput:
"""Input for muting/unmuting a conversation"""
conversation_id: GlobalID
is_muted: bool