Skip to content

Module comments-moderation (mobile)

Ce fichier doit rester synchronisé avec le code du module. À mettre à jour à chaque changement structurel.

Rôle : permettre au client de poster, éditer et supprimer ses avis sur les voyages réservés, et consulter ses propres commentaires. Aligné sur le module backend Horizon comments-moderation.

Code

  • Views : views/MyComments.vue
  • Components :
    • components/overlays-pages/Comments.vue, CommentFormOverlay.vue, MyCommentsList.vue
    • components/cards/CommentCard.vue, components/CommentCard.vue
    • components/travel-details/TravelRatingComments.vue (lecture seule, depuis TravelDetails)
  • Store : stores/comments.ts
  • Types : types/comments.ts (MyComment = TravelComment + champs voyage dénormalisés : travelName, travelSlug, travelImageUrl, bookingId)
  • API : protectedApi.comments.{getMine,getById,create,update,delete}

Entités principales

  • TravelComment (@spektrum/horizon-types) — { id, travelId, customerId?, author, comment, rating?, isApproved, parentCommentId? }
  • MyComment (extension front) — décoré en post-traitement de getMine à partir du bookings store (voir plus bas)

Invariants & règles spécifiques

  • getMine décore chaque commentaire avec les infos du voyage en croisant le bookings store :
    1. Trouve le booking dont l'occurrence pointe sur le travelId du commentaire
    2. Tire un visuel : travelPictures.find(isCard) → fallback find(isHero) → fallback première image
    3. Injecte travelName, travelSlug, travelImageUrl, bookingId, customerId Conséquence : getMine dépend implicitement du bookings store déjà chargé. Charger les bookings avant d'afficher MyComments.
  • isApproved : côté backend, un commentaire client posté via POST /travels/{id}/comments est forcé IsApproved=false. La moyenne d'étoiles d'un voyage ne compte que les approuvés. Côté mobile, on affiche dans MyComments les commentaires de l'utilisateur (approuvés ou non), mais sur TravelDetails seuls les approuvés remontent (filtre backend).
  • Création : create POST sur /travels/{travelId}/comments (pas sur /comments/...), avec body { travelId, comment, rating }.
  • Update / delete : sur /comments/{commentId}.
  • Réponses Buchard : single-level (un seul niveau de réponse, une seule réponse par parent, Author = "Buchard Voyages"). Non exposées dans l'API publique mobile à ce jour — uniquement back-office. Si elles deviennent visibles côté mobile : prévoir le rendu parentCommentId + nom auteur.

Dépendances

  • Dépend de : booking (pour le décorateur de getMine), travel-catalog (lecture sur les pages voyages)
  • Pas de dépendance entrante

Points d'attention

  • Le customerId peut être null dans la réponse backend — le décorateur retombe sur booking.general.customerId quand possible.
  • Ne pas confondre comments-moderation (avis voyages) avec le module backend notes-notifications qui couvre les notes internes et les notifications back-office.

Contributors

No contributors

Changelog

No recent changes