Application de messagerie en temps réel développée avec NestJS, GraphQL, RabbitMQ, Prisma, et un frontend React. Les utilisateurs peuvent s'inscrire, se connecter, créer des conversations et envoyer des messages en temps réel.
- Fonctionnalités
- Stack technique
- Installation
- Utilisation
- Structure des dossiers
- Tests
- Améliorations possibles
- Auteurs
-
Authentification JWT (inscription / connexion)
-
Liste des utilisateurs disponibles
-
Création de conversations à 2 participants
-
Affichage des conversations avec les derniers messages
-
Envoi et réception de messages avec:
- Stockage via Prisma
- Publication via RabbitMQ
- Réception temps réel via Subscriptions GraphQL
-
Interface frontend réactive
- NestJS
- GraphQL (Apollo Server)
- RabbitMQ (pour le traitement asynchrone des messages)
- Prisma (ORM avec SQLite)
- JWT (authentification)
- PubSub (Subscriptions)
- React + TypeScript
- Apollo Client (query/mutation/subscription)
- WebSocket pour GraphQL Subscriptions
- Node.js >=
20.11
- Docker
docker compose up -d rabbitmq
cd backend
npm install
npx prisma generate
npx prisma migrate dev --name init
npm run start:dev
cd frontend
npm install
npm run dev
- Inscription (mutation
createUser
) - Connexion (mutation
login
) → retour du token JWT à stocker danslocalStorage
- Choisir un utilisateur via une liste déroulante
- Le bouton "Nouvelle conversation" crée la conversation
-
Cliquer sur une conversation
-
Envoyer un message dans l'input texte
-
Le message est :
- envoyé via
mutation sendMessage
- traité par RabbitMQ
- enregistré en base (Prisma)
- publié en temps réel via
PubSub
- envoyé via
- Les nouveaux messages sont automatiquement reçus via
subscription messageSent
- Le scroll se fait automatiquement en bas
backend/
├── message/
├── conversation/
├── user/
├── rabbitmq/
├── pubsub/
├── auth/
├── prisma/
frontend/
├── components/
│ ├── button-add-conversation/
│ ├── chat/
│ ├── conversation-item/
│ ├── list-conversation/
│ ├── login-form/
│ ├── register-form/
│ ├── search-input/
│ ├── vetical-task-bar/
│
├── graphql/
│ ├── queries.ts
├── types.ts
├── ApolloClient.ts
cd backend
npm install
npm run test
cd frontend
npm install
npx cypress open
- Liste des utilisateurs connectés en temps réel
- Conversations à plusieurs participants
- Notion de "lu / non lu"
- Upload de fichiers (images, etc.)