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.
getMine décore chaque commentaire avec les infos du voyage en croisant le bookings store :
Trouve le booking dont l'occurrence pointe sur le travelId du commentaire
Tire un visuel : travelPictures.find(isCard) → fallback find(isHero) → fallback première image
Injecte travelName, travelSlug, travelImageUrl, bookingId, customerId Conséquence : getMinedé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.
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.
Module
comments-moderation(mobile) 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/MyComments.vuecomponents/overlays-pages/Comments.vue,CommentFormOverlay.vue,MyCommentsList.vuecomponents/cards/CommentCard.vue,components/CommentCard.vuecomponents/travel-details/TravelRatingComments.vue(lecture seule, depuisTravelDetails)stores/comments.tstypes/comments.ts(MyComment=TravelComment+ champs voyage dénormalisés :travelName,travelSlug,travelImageUrl,bookingId)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 degetMineà partir dubookingsstore (voir plus bas)Invariants & règles spécifiques
getMinedécore chaque commentaire avec les infos du voyage en croisant lebookingsstore :travelIddu commentairetravelPictures.find(isCard)→ fallbackfind(isHero)→ fallback première imagetravelName,travelSlug,travelImageUrl,bookingId,customerIdConséquence :getMinedépend implicitement dubookingsstore déjà chargé. Charger les bookings avant d'afficherMyComments.isApproved: côté backend, un commentaire client posté viaPOST /travels/{id}/commentsest forcéIsApproved=false. La moyenne d'étoiles d'un voyage ne compte que les approuvés. Côté mobile, on affiche dansMyCommentsles commentaires de l'utilisateur (approuvés ou non), mais surTravelDetailsseuls les approuvés remontent (filtre backend).createPOST sur/travels/{travelId}/comments(pas sur/comments/...), avec body{ travelId, comment, rating }./comments/{commentId}.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 renduparentCommentId+ nom auteur.Dépendances
booking(pour le décorateur degetMine),travel-catalog(lecture sur les pages voyages)Points d'attention
customerIdpeut êtrenulldans la réponse backend — le décorateur retombe surbooking.general.customerIdquand possible.comments-moderation(avis voyages) avec le module backendnotes-notificationsqui couvre les notes internes et les notifications back-office.Contributors
Changelog