Aller au contenu principal

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 de users.last_seen_at et client_accounts.last_seen_at, émission de presence:update (entityType user | client). Sur réception d'un Ping client, last_seen_at est rafraîchi pour garder une présence précise tant que la session est ouverte.
  • Frontend (app) : useGlobalMessages s'abonne à presence:update, maintient userPresence et clientPresence, et les combine dans la liste (indicateur en ligne / last seen). Ping périodique : envoi d'un Client.Ping toutes les 60 s tant que le socket est connecté, pour maintenir last_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 dans client_messages.content (conversations du photographe). Retour : { client: [{ contactId, clientAccountId, messageId, snippet, createdAt }] }.
    • GET /api/friend-messages/search?q=...&limit=20 : recherche dans friend_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), module conversation-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 (labels clearSearch).