Skip to main content

💬 Trade Forum - Forum communautaire

Le module Forum permet de créer une communauté d'entraide entre utilisateurs avec un système de discussions hiérarchiques et de modération.

🎯 Objectif

Créer une communauté d'entraide entre utilisateurs pour partager des expériences, poser des questions et obtenir des conseils sur les transports et la logistique.

✨ Fonctionnalités principales

  • Sujets de discussion : Les utilisateurs peuvent créer des topics
  • Réponses et commentaires : Système de messages hiérarchiques
  • Système de votes : Like/Dislike pour valoriser les bonnes réponses
  • Catégories : Organisation thématique (Transport, Logistique, etc.)
  • Tags : Étiquetage pour faciliter la recherche
  • Modération : Signalement et gestion des contenus inappropriés

🏗️ Structure hiérarchique

📂 Catégorie (ex: "Transport")
└── 📝 Sujet (ex: "Comment optimiser les délais ?")
├── 💬 Message principal
├── 💬 Réponse 1
│ └── 💬 Réponse à la réponse 1
└── 💬 Réponse 2

🔌 Endpoints disponibles

Topics (Sujets de discussion)

Créer un topic

POST /trade/forum/topics

Paramètres :

{
"title": "Comment optimiser les coûts de transport ?",
"description": "Discussion sur les meilleures pratiques",
"content": "Bonjour à tous ! J'aimerais connaître vos astuces pour optimiser les coûts de transport de marchandises entre Douala et Yaoundé.",
"categoryId": 1,
"tagIds": [1, 3, 5]
}

Réponse de succès :

{
"success": true,
"message": "Sujet créé avec succès",
"result": {
"id": 123,
"publicId": "topic-abc-123",
"title": "Comment optimiser les coûts de transport ?",
"description": "Discussion sur les meilleures pratiques",
"content": "Bonjour à tous ! J'aimerais connaître...",
"status": "ACTIVE",
"viewsCount": 0,
"messagesCount": 1,
"likesCount": 0,
"category": {
"id": 1,
"name": "Transport",
"description": "Discussions sur les transports"
},
"tags": [
{
"id": 1,
"name": "optimisation",
"color": "#007bff"
}
],
"author": {
"id": 456,
"firstName": "Jean",
"lastName": "Dupont"
},
"createdAt": "2025-07-21T10:30:00Z"
}
}

Lister les topics

GET /trade/forum/topics?page=1&limit=10&categoryId=1&sortBy=popularity

Paramètres de requête :

  • page : Numéro de page (défaut: 1)
  • limit : Éléments par page (défaut: 10, max: 50)
  • categoryId : Filtrer par catégorie
  • tagId : Filtrer par tag
  • status : Filtrer par statut (ACTIVE, CLOSED, ARCHIVED)
  • sortBy : Tri (recent, popularity, messages_count)
  • search : Recherche textuelle dans titre/contenu

Réponse :

{
"success": true,
"message": "Liste des sujets",
"result": {
"meta": {
"total": 45,
"total_pages": 5,
"current_page": 1,
"limit": 10
},
"data": [
{
"id": 123,
"title": "Comment optimiser les coûts de transport ?",
"description": "Discussion sur les meilleures pratiques",
"status": "ACTIVE",
"viewsCount": 156,
"messagesCount": 12,
"likesCount": 8,
"category": {
"id": 1,
"name": "Transport"
},
"tags": [
{
"id": 1,
"name": "optimisation",
"color": "#007bff"
}
],
"author": {
"id": 456,
"firstName": "Jean",
"lastName": "Dupont"
},
"lastMessage": {
"id": 789,
"content": "Excellente question ! Personnellement...",
"author": {
"firstName": "Marie",
"lastName": "Martin"
},
"createdAt": "2025-07-21T15:45:00Z"
},
"createdAt": "2025-07-21T10:30:00Z"
}
]
}
}

Détail d'un topic

GET /trade/forum/topics/{id}

Réponse :

{
"success": true,
"message": "Détail du sujet",
"result": {
"id": 123,
"title": "Comment optimiser les coûts de transport ?",
"description": "Discussion sur les meilleures pratiques",
"content": "Bonjour à tous ! J'aimerais connaître...",
"status": "ACTIVE",
"viewsCount": 157,
"messagesCount": 12,
"likesCount": 8,
"category": {
"id": 1,
"name": "Transport",
"description": "Discussions sur les transports"
},
"tags": [
{
"id": 1,
"name": "optimisation",
"color": "#007bff"
}
],
"author": {
"id": 456,
"firstName": "Jean",
"lastName": "Dupont",
"avatar": "/avatars/jean-dupont.jpg"
},
"messages": [
{
"id": 1,
"content": "Bonjour à tous ! J'aimerais connaître...",
"isMainMessage": true,
"likesCount": 3,
"dislikesCount": 0,
"repliesCount": 2,
"author": {
"id": 456,
"firstName": "Jean",
"lastName": "Dupont"
},
"createdAt": "2025-07-21T10:30:00Z"
}
],
"createdAt": "2025-07-21T10:30:00Z",
"updatedAt": "2025-07-21T15:45:00Z"
}
}

Messages

Créer un message

POST /trade/forum/messages

Paramètres :

{
"topicId": 123,
"content": "Excellente question ! Personnellement, je recommande de grouper les livraisons pour optimiser les trajets.",
"parentId": null
}

Réponse de succès :

{
"success": true,
"message": "Message ajouté avec succès",
"result": {
"id": 789,
"content": "Excellente question ! Personnellement...",
"isMainMessage": false,
"likesCount": 0,
"dislikesCount": 0,
"repliesCount": 0,
"parentId": null,
"topic": {
"id": 123,
"title": "Comment optimiser les coûts de transport ?"
},
"author": {
"id": 789,
"firstName": "Marie",
"lastName": "Martin"
},
"createdAt": "2025-07-21T15:45:00Z"
}
}

Liker/Disliker un message

POST /trade/forum/messages/{id}/like

Paramètres :

{
"action": "LIKE"
}

Actions possibles :

  • LIKE : J'aime
  • DISLIKE : Je n'aime pas
  • REMOVE : Supprimer le vote

Réponse :

{
"success": true,
"message": "Vote enregistré",
"result": {
"messageId": 789,
"action": "LIKE",
"likesCount": 4,
"dislikesCount": 0,
"userVote": "LIKE"
}
}

Signaler un message

POST /trade/forum/messages/{id}/report

Paramètres :

{
"reason": "INAPPROPRIATE_CONTENT",
"comment": "Contenu offensant et non pertinent"
}

Raisons de signalement :

  • SPAM : Contenu indésirable
  • INAPPROPRIATE_CONTENT : Contenu inapproprié
  • HARASSMENT : Harcèlement
  • FALSE_INFORMATION : Fausse information
  • OTHER : Autre raison

Réponse :

{
"success": true,
"message": "Signalement enregistré",
"result": {
"reportId": 456,
"messageId": 789,
"reason": "INAPPROPRIATE_CONTENT",
"status": "PENDING",
"createdAt": "2025-07-21T16:00:00Z"
}
}

Catégories

Lister les catégories

GET /trade/forum/categories

Réponse :

{
"success": true,
"message": "Liste des catégories",
"result": [
{
"id": 1,
"name": "Transport",
"description": "Discussions sur les transports",
"color": "#007bff",
"icon": "🚛",
"topicsCount": 45,
"messagesCount": 234,
"isActive": true
},
{
"id": 2,
"name": "Logistique",
"description": "Optimisation et gestion logistique",
"color": "#28a745",
"icon": "📦",
"topicsCount": 32,
"messagesCount": 156,
"isActive": true
}
]
}

Tags

Lister les tags

GET /trade/forum/tags?search=optim

Paramètres de requête :

  • search : Recherche textuelle dans le nom
  • limit : Nombre maximum de résultats (défaut: 20)

Réponse :

{
"success": true,
"message": "Liste des tags",
"result": [
{
"id": 1,
"name": "optimisation",
"color": "#007bff",
"usageCount": 23,
"isActive": true
},
{
"id": 2,
"name": "coûts",
"color": "#ffc107",
"usageCount": 18,
"isActive": true
}
]
}

🔒 Règles de validation

Topics

  • title : Obligatoire, minimum 5 caractères
  • content : Obligatoire, minimum 10 caractères
  • categoryId : Optionnel, doit exister si fourni

Messages

  • topicId : Obligatoire, doit exister
  • content : Obligatoire, minimum 3 caractères
  • parentId : Optionnel, doit exister si fourni

Votes

  • Un utilisateur ne peut voter qu'une fois par message
  • Impossible de voter sur ses propres messages

❌ Gestion des erreurs

Topic non trouvé

{
"success": false,
"message": "Sujet non trouvé",
"errors": {
"code": "TOPIC_NOT_FOUND",
"topicId": 999
}
}

Vote déjà existant

{
"success": false,
"message": "Vous avez déjà voté pour ce message",
"errors": {
"code": "VOTE_ALREADY_EXISTS",
"messageId": 789,
"currentVote": "LIKE"
}
}

Contenu modéré

{
"success": false,
"message": "Ce contenu a été modéré",
"errors": {
"code": "CONTENT_MODERATED",
"reason": "Contenu inapproprié"
}
}

Prochaine section : Annonces Trade