Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Redis Forum

Forum de discussion full-stack alimenté entièrement par Redis comme base de données unique. Aucun SQL — toutes les données (utilisateurs, catégories, threads, messages, sessions) sont persistées via les structures natives Redis (Hash, Set, List, Sorted Set, Pub/Sub).

Node.js React Redis Express


Fonctionnalités

  • Authentification — Inscription, connexion, sessions JWT stockées en Redis avec TTL
  • Catégories — Création, abonnement/désabonnement, liste des followers
  • Threads — Création, classement par popularité et récence, compteur de vues
  • Messages — Fil chronologique par thread, likes uniques par utilisateur
  • Temps réel — Notifications SSE via Redis Pub/Sub, présence en ligne
  • Exploration Redis — RedisInsight inclus pour visualiser les données

Architecture

┌─────────────┐     REST API      ┌─────────────┐     ioredis     ┌─────────────┐
│   React     │ ◄──────────────► │   Express   │ ◄──────────────► │    Redis    │
│  (Vite)     │     SSE stream    │   Node.js   │   Hash/Set/List  │   (Docker)  │
└─────────────┘                   └─────────────┘   ZSet/PubSub     └─────────────┘
Couche Technologie
Frontend React 18, React Router, Vite
Backend Node.js, Express, ioredis
Base de données Redis 7 (Hash, Set, List, Sorted Set, Pub/Sub)
Auth bcrypt + sessions Redis (SETEX / TTL)
Infra Docker Compose (Redis + RedisInsight)

Démarrage rapide

Prérequis

Installation

# 1. Cloner le dépôt
git clone https://github.com/anassrh/Redis-forum.git
cd Redis-forum

# 2. Lancer Redis et RedisInsight
docker-compose up -d

# 3. Backend
cd backend
npm install
cp .env.example .env        # Windows : copy .env.example .env
npm run seed                # Données de démonstration
npm run dev

# 4. Frontend (nouveau terminal)
cd frontend
npm install
npm run dev

Accès

Service URL
Frontend http://localhost:5173
API Backend http://localhost:3001
RedisInsight http://localhost:8001

Configuration

Copier backend/.env.example vers backend/.env :

PORT=3001
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
JWT_SECRET=your_secret_here

Modèle de données Redis

Donnée Structure Clé Redis
Profil utilisateur Hash user:{userId}
Index email String user:email:{email}
Session String + TTL session:{token}
Catégorie Hash category:{categoryId}
Index catégories Set categories
Catégories suivies Set user:{userId}:followedCategories
Followers catégorie Set category:{categoryId}:followers
Thread Hash thread:{threadId}
Threads par catégorie List category:{categoryId}:threads
Threads récents Sorted Set threads:recent
Threads populaires Sorted Set threads:popular
Message Hash message:{messageId}
Messages par thread List thread:{threadId}:messages
Likes message Set message:{messageId}:likes
Utilisateurs en ligne Sorted Set users:online
Notifications Pub/Sub category:{categoryId}:notifications

API REST

Méthode Endpoint Description
POST /api/auth/register Inscription
POST /api/auth/login Connexion
POST /api/auth/logout Déconnexion
GET /api/auth/me Profil courant
GET /api/categories Liste des catégories
POST /api/categories Créer une catégorie
POST /api/categories/:id/follow Suivre une catégorie
GET /api/threads/recent Top 20 threads récents
GET /api/threads/popular Top 10 threads populaires
POST /api/threads Créer un thread
GET /api/threads/:id Détail thread (+ vues)
GET /api/threads/:threadId/messages Messages d'un thread
POST /api/threads/:threadId/messages Poster un message
POST /api/messages/:id/like Liker un message
GET /api/users/online Utilisateurs en ligne
GET /api/notifications/stream Flux SSE notifications

Toutes les routes protégées requièrent le header Authorization: Bearer <token>.


Structure du projet

redis-forum/
├── backend/
│   ├── src/
│   │   ├── config/         # Connexion Redis
│   │   ├── controllers/    # Handlers HTTP
│   │   ├── middleware/     # Auth JWT / session
│   │   ├── routes/         # Routes Express
│   │   ├── services/       # Logique métier + Redis
│   │   └── scripts/        # Seed de données
│   └── .env.example
├── frontend/
│   └── src/
│       ├── api/            # Client HTTP
│       ├── components/     # Composants React
│       ├── context/        # Auth context
│       └── pages/          # Pages de l'application
├── docs/                   # Documentation Redis détaillée
└── docker-compose.yml

Documentation

Des guides détaillés sur le mapping Redis sont disponibles dans le dossier docs/ :


Scripts disponibles

Commande Répertoire Description
npm run dev backend/ Serveur API avec hot-reload
npm run seed backend/ Peupler Redis avec des données de test
npm run dev frontend/ Serveur de développement Vite
npm run build frontend/ Build de production

Licence

Projet open source — libre d'utilisation et de modification.

About

A full-stack forum application powered entirely by Redis, featuring authentication, categories, threads, messages, likes, online presence, SSE real-time notifications, Redis Pub/Sub and RedisInsight.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages