fix: persist message delivery status across server restarts
All checks were successful
CI / test (push) Successful in 21s
All checks were successful
CI / test (push) Successful in 21s
This commit is contained in:
@@ -107,7 +107,26 @@ async def get_messages(
|
||||
) -> list[Message]:
|
||||
await ensure_chat_membership(db, chat_id=chat_id, user_id=user_id)
|
||||
safe_limit = max(1, min(limit, 100))
|
||||
return await repository.list_chat_messages(db, chat_id, user_id=user_id, limit=safe_limit, before_id=before_id)
|
||||
messages = await repository.list_chat_messages(db, chat_id, user_id=user_id, limit=safe_limit, before_id=before_id)
|
||||
if not messages:
|
||||
return messages
|
||||
receipts = await repository.list_chat_receipts(db, chat_id=chat_id)
|
||||
other_receipts = [receipt for receipt in receipts if receipt.user_id != user_id]
|
||||
if not other_receipts:
|
||||
return messages
|
||||
for message in messages:
|
||||
if message.sender_id != user_id:
|
||||
continue
|
||||
is_read = any((receipt.last_read_message_id or 0) >= message.id for receipt in other_receipts)
|
||||
if is_read:
|
||||
setattr(message, "delivery_status", "read")
|
||||
continue
|
||||
is_delivered = any((receipt.last_delivered_message_id or 0) >= message.id for receipt in other_receipts)
|
||||
if is_delivered:
|
||||
setattr(message, "delivery_status", "delivered")
|
||||
continue
|
||||
setattr(message, "delivery_status", "sent")
|
||||
return messages
|
||||
|
||||
|
||||
async def search_messages(
|
||||
|
||||
Reference in New Issue
Block a user