destinyebuka commited on
Commit
f7e886e
·
1 Parent(s): 1306e79
app/models/message.py CHANGED
@@ -22,6 +22,9 @@ class Message:
22
  content: Optional[str] = None,
23
  media: Optional[dict] = None,
24
  property_card: Optional[dict] = None,
 
 
 
25
  ) -> dict:
26
  """Create message document for insertion"""
27
  now = datetime.utcnow()
@@ -34,6 +37,10 @@ class Message:
34
  "content": content,
35
  "media": media, # {url, filename, size, mime_type, duration, thumbnail_url}
36
  "property_card": property_card, # {listing_id, title, price, currency, bedrooms, bathrooms, location, image_url, listing_type}
 
 
 
 
37
  "is_read": False,
38
  "read_at": None,
39
  # Edit tracking
@@ -139,6 +146,10 @@ class Message:
139
  "content": message_doc.get("content") if not is_deleted else None,
140
  "media": message_doc.get("media") if not is_deleted else None,
141
  "property_card": message_doc.get("property_card") if not is_deleted else None,
 
 
 
 
142
  "is_read": message_doc.get("is_read", False),
143
  "read_at": Message._serialize_datetime(message_doc.get("read_at")),
144
  # Edit fields
 
22
  content: Optional[str] = None,
23
  media: Optional[dict] = None,
24
  property_card: Optional[dict] = None,
25
+ replied_to_message_id: Optional[str] = None,
26
+ replied_to_content: Optional[str] = None,
27
+ replied_to_sender: Optional[str] = None,
28
  ) -> dict:
29
  """Create message document for insertion"""
30
  now = datetime.utcnow()
 
37
  "content": content,
38
  "media": media, # {url, filename, size, mime_type, duration, thumbnail_url}
39
  "property_card": property_card, # {listing_id, title, price, currency, bedrooms, bathrooms, location, image_url, listing_type}
40
+ # Reply-to fields
41
+ "replied_to_message_id": replied_to_message_id,
42
+ "replied_to_content": replied_to_content, # Preview of replied message (truncated)
43
+ "replied_to_sender": replied_to_sender, # Name of original sender
44
  "is_read": False,
45
  "read_at": None,
46
  # Edit tracking
 
146
  "content": message_doc.get("content") if not is_deleted else None,
147
  "media": message_doc.get("media") if not is_deleted else None,
148
  "property_card": message_doc.get("property_card") if not is_deleted else None,
149
+ # Reply-to fields
150
+ "replied_to_message_id": message_doc.get("replied_to_message_id"),
151
+ "replied_to_content": message_doc.get("replied_to_content"),
152
+ "replied_to_sender": message_doc.get("replied_to_sender"),
153
  "is_read": message_doc.get("is_read", False),
154
  "read_at": Message._serialize_datetime(message_doc.get("read_at")),
155
  # Edit fields
app/routes/conversations.py CHANGED
@@ -265,6 +265,9 @@ async def send_message(
265
  content=dto.content,
266
  media=media,
267
  property_card=dto.property_card.dict() if dto.property_card else None,
 
 
 
268
  )
269
 
270
 
 
265
  content=dto.content,
266
  media=media,
267
  property_card=dto.property_card.dict() if dto.property_card else None,
268
+ replied_to_message_id=dto.replied_to_message_id,
269
+ replied_to_content=dto.replied_to_content,
270
+ replied_to_sender=dto.replied_to_sender,
271
  )
272
 
273
 
app/routes/websocket_chat.py CHANGED
@@ -238,6 +238,10 @@ async def handle_send_message(user_id: str, user_name: str, user_avatar: Optiona
238
  content = data.get("content")
239
  media = data.get("media")
240
  property_card = data.get("property_card")
 
 
 
 
241
 
242
  # Auto-detect message type based on content
243
  if property_card:
@@ -270,6 +274,9 @@ async def handle_send_message(user_id: str, user_name: str, user_avatar: Optiona
270
  content=content,
271
  media=media,
272
  property_card=property_card,
 
 
 
273
  )
274
 
275
  # DEBUG: Log message_doc before inserting
 
238
  content = data.get("content")
239
  media = data.get("media")
240
  property_card = data.get("property_card")
241
+ # Reply-to fields
242
+ replied_to_message_id = data.get("replied_to_message_id")
243
+ replied_to_content = data.get("replied_to_content")
244
+ replied_to_sender = data.get("replied_to_sender")
245
 
246
  # Auto-detect message type based on content
247
  if property_card:
 
274
  content=content,
275
  media=media,
276
  property_card=property_card,
277
+ replied_to_message_id=replied_to_message_id,
278
+ replied_to_content=replied_to_content,
279
+ replied_to_sender=replied_to_sender,
280
  )
281
 
282
  # DEBUG: Log message_doc before inserting
app/schemas/conversation.py CHANGED
@@ -124,6 +124,10 @@ class SendMessageDto(BaseModel):
124
  content: Optional[str] = None
125
  media_url: Optional[str] = None
126
  property_card: Optional[PropertyCardDto] = None
 
 
 
 
127
 
128
 
129
  class CallDto(BaseModel):
 
124
  content: Optional[str] = None
125
  media_url: Optional[str] = None
126
  property_card: Optional[PropertyCardDto] = None
127
+ # Reply-to fields
128
+ replied_to_message_id: Optional[str] = None
129
+ replied_to_content: Optional[str] = None
130
+ replied_to_sender: Optional[str] = None
131
 
132
 
133
  class CallDto(BaseModel):
app/services/conversation_service.py CHANGED
@@ -388,6 +388,9 @@ class ConversationService:
388
  content: Optional[str] = None,
389
  media: Optional[dict] = None,
390
  property_card: Optional[dict] = None,
 
 
 
391
  ) -> dict:
392
  """
393
  Send a message in a conversation.
@@ -428,6 +431,9 @@ class ConversationService:
428
  content=content,
429
  media=media,
430
  property_card=property_card,
 
 
 
431
  )
432
 
433
  result = await db.messages.insert_one(message_doc)
 
388
  content: Optional[str] = None,
389
  media: Optional[dict] = None,
390
  property_card: Optional[dict] = None,
391
+ replied_to_message_id: Optional[str] = None,
392
+ replied_to_content: Optional[str] = None,
393
+ replied_to_sender: Optional[str] = None,
394
  ) -> dict:
395
  """
396
  Send a message in a conversation.
 
431
  content=content,
432
  media=media,
433
  property_card=property_card,
434
+ replied_to_message_id=replied_to_message_id,
435
+ replied_to_content=replied_to_content,
436
+ replied_to_sender=replied_to_sender,
437
  )
438
 
439
  result = await db.messages.insert_one(message_doc)