💬 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égorietagId: Filtrer par tagstatus: 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'aimeDISLIKE: Je n'aime pasREMOVE: 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ésirableINAPPROPRIATE_CONTENT: Contenu inappropriéHARASSMENT: HarcèlementFALSE_INFORMATION: Fausse informationOTHER: 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 nomlimit: 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