If you want to start quickly, navigate to this repository and run the following command:
docker compose upAPI backend GraphQL moderne pour l'application de chat en temps réel Morse, développée avec NestJS, TypeScript et Prisma. Support des WebSockets pour la communication en temps réel et intégration RabbitMQ pour la gestion des messages asynchrones.
- Système d'authentification JWT sécurisé
- Stratégies Passport (Local et JWT)
- Guards GraphQL pour la protection des routes
- Gestion des utilisateurs avec avatars
- WebSocket avec GraphQL Subscriptions
- Messages instantanés entre utilisateurs
- Conversations privées et de groupe
- Historique complet des messages
- Schema GraphQL complet avec resolvers
- Mutations pour toutes les opérations CRUD
- Subscriptions pour les mises à jour en temps réel
- DataLoader pour l'optimisation des requêtes
- Intégration RabbitMQ pour la gestion des messages
- Queue de messages persistante
- Communication inter-services
- Prisma ORM avec SQLite (développement)
- Migrations automatisées
- Modèles typés pour User, Conversation et Message
- Indexation optimisée
- Tests unitaires avec Jest
- Tests d'intégration
- Tests end-to-end avec Puppeteer
- Tests de performance avec Artillery
- Couverture de code complète
- NestJS 11.0.1 - Framework Node.js progressif
- TypeScript 5.7.3 - Typage statique
- GraphQL 16.11.0 - API query language
- Apollo Server 4.12.2 - Serveur GraphQL
- Prisma 6.10.1 - ORM moderne
- SQLite - Base de données (développement)
- @prisma/client - Client Prisma généré
- Passport 0.7.0 - Stratégies d'authentification
- JWT - Tokens d'authentification
- bcrypt 6.0.0 - Hachage des mots de passe
- RabbitMQ via amqplib 0.10.8
- GraphQL Subscriptions - WebSocket en temps réel
- DataLoader 2.2.3 - Optimisation des requêtes
- Jest 29.7.0 - Framework de test
- Artillery 2.0.23 - Tests de performance
- Puppeteer - Tests end-to-end
- ESLint & Prettier - Qualité du code
- Node.js (version 18 ou supérieure)
- npm ou yarn
- SQLite (pour le développement local)
- RabbitMQ (optionnel, peut être lancé via Docker)
- Docker (optionnel pour la conteneurisation)
-
Clonez le repository et naviguez dans le dossier
git clone https://github.com/Hydevs-Corp/Morse-Back.git cd Morse-Back -
Lancez l'ensemble des services
docker-compose up -d
-
Accédez aux services
- Backend:
http://localhost:3001 - RabbitMQ Management:
http://localhost:15672(admin/admin123)
- Backend:
-
Accédez au frontend
- Si vous utilisez également le frontend, il sera accessible sur:
http://localhost:3000 - Consultez le README de Morse-Front pour plus d'informations.
- Si vous utilisez également le frontend, il sera accessible sur:
-
Clonez le repository et naviguez dans le dossier
git clone https://github.com/Hydevs-Corp/Morse-Back.git cd Morse-Back -
Installez les dépendances
npm install --legacy-peer-deps
-
Configurez les variables d'environnement
cp .env.example .env # Éditez le fichier .env avec vos configurations -
Initialisez la base de données
npx prisma generate npx prisma migrate dev
-
Démarrez RabbitMQ (optionnel)
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
-
Démarrez le serveur de développement
npm run start:dev
-
Accédez à l'application
- API GraphQL:
http://localhost:3001/graphql
- API GraphQL:
Pour plus d'informations sur le frontend, consultez le README de Morse-Front.
-
Lancez l'ensemble de l'infrastructure
docker-compose up -d
Cela démarre :
- RabbitMQ avec interface de gestion
- morse-back (API backend)
- Configuration réseau complète
-
Accédez aux services
- API Backend:
http://localhost:3000 - RabbitMQ Management:
http://localhost:15672(admin/admin123)
- API Backend:
# Démarrage avec hot reload
npm run start:dev
# Démarrage en mode debug
npm run start:debug
# Build de production
npm run build
# Démarrage en production
npm run start:prod# Génération du client Prisma
npx prisma generate
# Application des migrations
npx prisma migrate dev
# Reset de la base de données
npx prisma migrate reset
# Visualisation des données
npx prisma studio# Tests unitaires
npm run test:unit
# Tests d'intégration
npm run test:integration
# Tests end-to-end
npm run test:e2e
# Tests de performance
npm run test:performance
# Tous les tests
npm run test:all
# Tests avec couverture
npm run test:cov# Linting
npm run lint
# Formatage
npm run formatCréez un fichier .env dans le dossier morse-back:
# Base de données
DATABASE_URL="file:./prisma/dev.db"
# JWT
JWT_SECRET="your-super-secret-jwt-key"
JWT_EXPIRES_IN="7d"
# RabbitMQ
RABBITMQ_URL="amqp://admin:admin123@localhost:5672"
# CORS
CORS_ORIGIN="http://localhost:5173"
# Port de l'application
PORT=3001
# Environnement
NODE_ENV="development"Le projet utilise RabbitMQ pour la gestion asynchrone des messages :
- Queue:
messages_queue - Exchange: Direct exchange
- Routing: Messages routés par conversation ID
- Durabilité: Queue persistante
- Endpoint:
/graphql - Subscriptions: WebSocket sur le même port
- Playground: Activé en développement
- Introspection: Activée en développement
morse-back/
├── src/
│ ├── auth/ # Authentification (JWT, Passport)
│ ├── users/ # Gestion des utilisateurs
│ ├── conversations/ # Gestion des conversations
│ ├── messages/ # Gestion des messages
│ ├── rabbitmq/ # Configuration RabbitMQ
│ ├── pubsub/ # WebSocket subscriptions
│ ├── dataloader/ # Optimisation des requêtes
│ ├── context/ # Context GraphQL
│ ├── prisma.service.ts # Service Prisma
│ ├── app.module.ts # Module principal
│ └── main.ts # Point d'entrée
├── prisma/
│ ├── schema.prisma # Schéma de base de données
│ ├── migrations/ # Migrations Prisma
│ └── dev.db # Base SQLite (dev)
├── test/ # Tests e2e et configuration
├── coverage/ # Rapports de couverture
├── docker-compose.yml # Configuration Docker Compose
├── Dockerfile # Configuration Docker
└── package.json # Dépendances et scripts
npm run test:unitTests des services, resolvers et guards individuels.
npm run test:integrationTests des interactions entre modules.
npm run test:e2eTests complets de l'API GraphQL avec Puppeteer.
npm run test:performanceTests de charge avec Artillery pour mesurer les performances.
Les logs sont configurés avec les niveaux appropriés pour chaque environnement.
- Endpoint de santé disponible
- Vérification de la connexion base de données
- Vérification RabbitMQ
- Couverture de code avec Jest
- Rapports de performance avec Artillery
# Regenerer le client Prisma
npx prisma generate
# Réinitialiser la base
npx prisma migrate reset# Vérifier le statut
docker ps | grep rabbitmq
# Redémarrer le service
docker restart morse-rabbitmq# Réinstaller avec legacy peer deps
npm install --legacy-peer-deps# Tuer le processus sur le port 3001
npx kill-port 3001# Build de l'image de production
docker build -t morse-back:prod .
# Déploiement
docker run -d \
--name morse-back-prod \
-p 3001:3001 \
-e NODE_ENV=production \
-e DATABASE_URL="your-production-db-url" \
morse-back:prod- Utilisez une base de données PostgreSQL
- Configurez JWT_SECRET sécurisé
- Définissez CORS_ORIGIN approprié
- Activez HTTPS
Le schema GraphQL complet est disponible via introspection à /graphql.
users- Liste des utilisateursconversations- Conversations de l'utilisateurmessages- Messages d'une conversation
login- Authentificationregister- InscriptionsendMessage- Envoi de messagecreateConversation- Création de conversation
messageAdded- Nouveaux messages en temps réelconversationUpdated- Mises à jour de conversation
- Fork le projet
- Créez une branche pour votre fonctionnalité
- Ajoutez des tests pour votre code
- Vérifiez que tous les tests passent
- Committez vos changements
- Poussez vers la branche
- Ouvrez une Pull Request
Ce projet est développé dans un cadre éducatif.
- Sébastien Branly
- Guillaume Maugin
- Louis Réville
Développé avec ❤️ pour le projet Morse - Une API robuste pour une nouvelle façon de communiquer