Backend pour l'application Choice App, permettant de proposer des choix personnalisés aux utilisateurs.
- Node.js (v14+)
- MongoDB
- npm
- Cloner le dépôt
- Installer les dépendances:
npm install
- Configurer le fichier
.envavec les variables d'environnement nécessaires (voir.env.example)
npm startPour le développement:
npm run devmodels/- Définitions des modèles de données Mongoosecontrollers/- Logique de contrôle pour les routesroutes/- Définitions des routes APIservices/- Services partagésscripts/- Scripts utilitairesmiddleware/- Middleware Express
Ce script analyse les bases de données MongoDB pour vérifier:
- La présence des collections attendues
- L'existence des index géospatiaux nécessaires
- La présence des champs requis dans les documents
Pour l'exécuter:
npm run check-dbSi check_all_mongodb.js détecte des collections manquantes, exécutez:
npm run fix-collectionsCe script:
- Crée les collections manquantes nécessaires au bon fonctionnement
- Copie les données des collections existantes si nécessaire
- Adapte la structure des données lors de la copie
- Crée les index appropriés
Les index géospatiaux sont essentiels pour les recherches de proximité. Si des index sont manquants, exécutez:
npm run fix-indexesCe script:
- Analyse toutes les collections spatiales
- Crée les index 2dsphere manquants
- Détecte automatiquement le format des coordonnées
Si certains documents n'ont pas tous les champs requis, exécutez:
npm run fix-fieldsCe script:
- Recherche les documents avec des champs manquants
- Ajoute les champs manquants avec des valeurs par défaut appropriées
- Génère un rapport des corrections effectuées
Pour effectuer toutes les corrections en une seule commande:
npm run repair-dbCette commande exécute dans l'ordre:
fix-collections- Création des collections manquantesfix-indexes- Ajout des index géospatiaux manquantsfix-fields- Ajout des champs requis manquants
Pour créer une sauvegarde complète de toutes les bases de données:
npm run backup-dbLe backend expose les endpoints suivants pour répondre aux besoins du frontend Flutter:
POST /api/auth/login- Connexion utilisateurPOST /api/auth/register- Inscription utilisateurPOST /api/auth/reset-password- Demande de réinitialisation mot de passePOST /api/auth/confirm-reset- Confirmer réinitialisation mot de passe
GET /api/users- Récupérer tous les utilisateursGET /api/users/:id- Récupérer un utilisateur spécifiquePUT /api/users/:id- Mettre à jour un utilisateurDELETE /api/users/:id- Supprimer un utilisateurPOST /api/users/:userId/follow/:producerId- Suivre un producteurDELETE /api/users/:userId/unfollow/:producerId- Ne plus suivre un producteur
GET /api/producers- Récupérer tous les producteursGET /api/producers/search- Recherche de producteursGET /api/producers/nearby- Producteurs à proximitéGET /api/producers/:id- Détails d'un producteurGET /api/producers/:id/events- Événements d'un producteurGET /api/leisureProducers- Récupérer les producteurs de loisirsGET /api/leisureProducers/nearby- Producteurs de loisirs à proximitéGET /api/wellness- Récupérer les établissements de bien-êtreGET /api/wellness/nearby- Établissements de bien-être à proximitéGET /api/wellness/categories- Catégories de bien-être
GET /api/events- Récupérer tous les événementsGET /api/events/search- Recherche d'événementsGET /api/events/nearby- Événements à proximitéGET /api/events/:id- Détails d'un événementPOST /api/events- Créer un événementPUT /api/events/:id- Mettre à jour un événementDELETE /api/events/:id- Supprimer un événement
POST /api/search- Recherche globale sur toutes les collectionsGET /api/search/restaurants- Recherche de restaurantsGET /api/search/leisure/places- Recherche de lieux de loisirsGET /api/search/leisure/events- Recherche d'événementsGET /api/search/wellness- Recherche d'établissements de bien-êtreGET /api/search/users- Recherche d'utilisateursGET /api/search/nearby- Recherche à proximité (tous types)GET /api/search/trending- Recherches tendances
GET /api/conversations/:userId- Conversations d'un utilisateurGET /api/conversations/:conversationId/messages- Messages d'une conversationPOST /api/conversations/new-message- Envoyer un message
GET /api/feed/:userId- Feed d'un utilisateurGET /api/feed/producer/:producerId- Feed d'un producteur
GET /api/map/heatmap/:producerId- Données heatmap pour un producteurGET /api/map/friends/:userId- Amis à proximité pour la carte
Les endpoints API sont alignés avec les besoins du frontend Flutter, notamment:
- Les cartes (restaurant, loisir, bien-être, amis)
- Les profils producteurs (restaurant, loisir, bien-être)
- Le système de messagerie
- La recherche unifiée
- Le système de feed
Les requêtes géospatiales échouent généralement pour deux raisons:
- Index 2dsphere manquants - Exécutez
npm run fix-indexes - Format de coordonnées incorrect - Les coordonnées doivent être au format GeoJSON:
{ type: "Point", coordinates: [longitude, latitude] }
Si vous rencontrez des erreurs "Collection not found":
- Exécutez
npm run fix-collectionspour créer les collections manquantes - Redémarrez le serveur
En cas d'erreurs dans les données:
- Exécutez la réparation complète:
npm run repair-db - Vérifiez les résultats avec
npm run check-db
- Faire un fork du projet
- Créer une branche de fonctionnalité (
git checkout -b feature/amazing-feature) - Commiter vos changements (
git commit -m 'Add some amazing feature') - Pousser la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request