Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions ticket-backend/app/models/ticket.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,23 @@ def __init__(
self._ai_reasoning = ai_reasoning or {}
self._resolution_action = resolution_action
self._suggested_assignee = suggested_assignee
self._title = title if title else description
# Set title intelligently: prefer explicit title, then description, then extract from content
if title:
self._title = title
elif description:
self._title = description
else:
# Try to extract title from content
content_dict = content.to_dict()
if "subject" in content_dict:
self._title = content_dict["subject"]
elif "issue_title" in content_dict:
self._title = content_dict["issue_title"]
elif "message_text" in content_dict:
# Truncate long messages for title
self._title = content_dict["message_text"][:100]
else:
self._title = None
self._description = description

@classmethod
Expand Down Expand Up @@ -144,7 +160,7 @@ def suggested_assignee(self) -> Optional[str]:
@property
def title(self) -> str:
"""Get ticket title, falling back to content-based title if not set."""
if self._title is not None:
if self._title:
return self._title
# Fallback to extracting from content
content_dict = self._content.to_dict()
Expand All @@ -153,7 +169,9 @@ def title(self) -> str:
elif "issue_title" in content_dict:
return content_dict["issue_title"]
elif "message_text" in content_dict:
return content_dict["message_text"][:100]
# Truncate long messages for title
msg = content_dict["message_text"]
return msg[:100] + ("..." if len(msg) > 100 else "")
return "Untitled Ticket"

@property
Expand Down