Plan – Améliorations messagerie (app + portail)
Référence : PLAN_AMELIORATIONS_CRM.md – Messagerie & Communication.
1. Présence temps réel (WebSocket + last_seen_at)
Statut : ✅ Complet
- Backend :
websocket.gateway.ts– à la connexion/déconnexion, mise à jour deusers.last_seen_atetclient_accounts.last_seen_at, émission depresence:update(entityType user | client). Sur réception d'un Ping client,last_seen_atest rafraîchi pour garder une présence précise tant que la session est ouverte. - Frontend (app) :
useGlobalMessagess'abonne àpresence:update, maintientuserPresenceetclientPresence, et les combine dans la liste (indicateur en ligne / last seen). Ping périodique : envoi d'unClient.Pingtoutes les 60 s tant que le socket est connecté, pour maintenirlast_seen_atà jour sans attendre la déconnexion.
2. Recherche plein-texte dans les conversations et messages
Statut : ✅ Complet (app)
- Backend :
GET /api/client-messages/app/conversations/search?q=...&limit=20: recherche dansclient_messages.content(conversations du photographe). Retour :{ client: [{ contactId, clientAccountId, messageId, snippet, createdAt }] }.GET /api/friend-messages/search?q=...&limit=20: recherche dansfriend_messages.content. Retour :{ friend: [{ friendId, messageId, snippet, createdAt }] }.
- Frontend (app) : Barre de recherche avec debounce 300 ms ; à partir de 2 caractères, appel des deux endpoints, fusion des résultats (client + ami), tri par date du hit. Affichage des snippets avec surlignage du terme recherché (reste en gris, match en blanc gras sur fond primary). Bouton croix pour vider la recherche. Au clic sur une conversation issue de la recherche, scroll automatique jusqu'au message trouvé dans le fil. Fichiers :
client-messages-api,friend-messages-api, hooks search,useGlobalMessages,ConversationList,ClientThreadView/FriendThreadView(scrollToMessageId).
3. Archivage / restauration de conversations
Statut : ✅ Backend + frontend app
- Backend : Table
user_archived_conversations(migration 0191), moduleconversation-archive, endpoints archive/unarchive (client + ami). Exclure par défaut les conversations archivées des listes principales. - Frontend (app) : Action « Archiver » dans la liste, panneau « Archivées » dans la sidebar, action « Restaurer » depuis le menu (⋯) du fil.
- Portail client : Même logique d'archivage/restauration côté client (scope par client_account) — à compléter si besoin.
4. Portail client – alignement UX recherche
Statut : ✅ Complet (recherche liste)
- Recherche : Filtre par nom / société / email du photographe (liste des conversations). Bouton croix pour vider le champ de recherche. Surlignage du terme recherché dans le nom du photographe et dans l'aperçu du dernier message (reste en gris, match en blanc gras sur fond primary). Fichiers :
ConversationsPanel,ConversationItem,ClientPortalMessagesPage(labelsclearSearch).