optimizations
This commit is contained in:
@@ -10,7 +10,10 @@ Skinbase Nova messaging now uses Laravel Reverb, Laravel Broadcasting, Laravel E
|
||||
- Read markers are stored on conversation participants and expanded into `message_reads` for durable receipts.
|
||||
- The conversation list response now includes `summary.unread_total` for global badge consumers.
|
||||
- Reconnect recovery uses `GET /api/messages/{conversation_id}/delta?after_message_id=...`.
|
||||
- Delta recovery also returns the latest conversation summary and aggregate unread total so the inbox sidebar can heal after a missed `conversation.updated` broadcast.
|
||||
- Presence heartbeats use `POST /api/messages/presence/heartbeat` and are intended only to support offline fallback notification logic plus server-side presence awareness.
|
||||
- Message sends are idempotent per sender and conversation when the client retries with the same `client_temp_id`.
|
||||
- The database also enforces sender-scoped `client_temp_id` uniqueness so retry races cannot persist duplicate rows.
|
||||
|
||||
## Local setup
|
||||
|
||||
@@ -42,3 +45,4 @@ Skinbase Nova messaging now uses Laravel Reverb, Laravel Broadcasting, Laravel E
|
||||
- The conversation view loads once via HTTP.
|
||||
- Live message, read, typing, and conversation summary updates arrive over websocket channels.
|
||||
- When the socket reconnects, the client requests deltas from the explicit `delta` endpoint and merges them idempotently by message id, UUID, and client temp id.
|
||||
- HTTP send retries also reuse the original stored message when `client_temp_id` matches, preventing duplicate broadcasts during reconnect races.
|
||||
|
||||
Reference in New Issue
Block a user