Skip to main content

Six Degrees of Kevin Bacon

Six Degrees of Kevin Bacon

Jeu web inspiré du concept des six degrés de séparation (variante "Six Degrees of Kevin Bacon"). Le but : relier deux acteurs entre eux en passant par des films qu'ils ont tournés en commun, en un minimum d'étapes.

  • Dépôt : https://git.hugo-pierret.be/Hugyouu/six-degrees
  • App : https://six-degrees.hugo-pierret.be

Fonctionnalités

  • Défi quotidien — une paire d'acteurs par jour, commune à tous les joueurs
  • Mode infini — parties en solo avec des paires aléatoires
  • Multijoueur temps réel — lobbys via WebSocket (SignalR)
  • Calendrier — historique des défis quotidiens passés
  • Visualisation graphe — représentation interactive acteur → film → acteur (D3.js)

Stack technique

Couche Technologie
Backend ASP.NET Core 8.0 (C#)
Base de données PostgreSQL + Entity Framework Core 8.0
Temps réel SignalR
Frontend React 18 + Vite
Styles Tailwind CSS + Material Tailwind
Graphe react-force-graph-2d (D3.js)
API externe TMDB
Déploiement Docker + Docker Compose

Architecture

six-degrees/
├── backend/
│   ├── SixDegrees.Api/            # Contrôleurs, hubs SignalR, config
│   ├── SixDegrees.Domain/         # Logique métier, services, entités
│   └── SixDegrees.Infrastructure/ # Accès données, migrations EF Core
├── frontend/
│   └── src/
│       ├── pages/                 # Vues (Home, DailyChallenge, Lobby…)
│       ├── components/            # Composants réutilisables
│       └── hooks/                 # Hooks custom (SignalR, username…)
├── docker-compose.yml
└── .env.example

Algorithme

Bidirectional BFS pour trouver le chemin le plus court entre deux acteurs (profondeur max = 6 degrés).

Modèle de données

Stocké en PostgreSQL via Entity Framework Core :

  • Person { id, name, popularity } — acteurs/célébrités
  • Title { id, name, year, type } — films et séries
  • Relation Person → Title (ACTED_IN)

Données importées depuis l'API TMDB.


Lancer le projet

Prérequis

  • Docker et Docker Compose
  • Clés API TMDB (compte gratuit sur themoviedb.org)

Démarrage rapide

cp .env.example .env
# Remplir TMDB_API_KEY, TMDB_ACCESS_TOKEN, etc.
docker compose up --build

Application disponible sur http://localhost (ou APP_PORT).

Variables d'environnement

Variable Description
TMDB_API_KEY Clé API TMDB (requise)
TMDB_ACCESS_TOKEN Token d'accès TMDB (requis)
DB_CONNECTION_STRING Chaîne de connexion PostgreSQL
APP_PORT Port exposé pour le frontend (défaut : 80)

Développement local

Backend

cd backend
dotnet restore
dotnet run --project SixDegrees.Api/
# API sur http://localhost:8080
# Swagger : http://localhost:8080/swagger

Frontend

cd frontend
npm install
npm run dev
# Dev server sur http://localhost:5173

CI/CD

Workflow Gitea (.gitea/workflows/deploy.yaml) déclenché automatiquement sur chaque tag v*.*.* — rebuild et redéploiement via Docker Compose.

git tag v1.0.0
git push --tags

Notes de conception initiale

Lors de la phase de prototype, plusieurs choix ont été évalués :

Critère Option retenue Alternatives envisagées
BDD graphe PostgreSQL + EF Core Apache AGE (extension PG), Neo4j
Backend ASP.NET Core (C#) Node.js / Express
Algo chemin Bidirectional BFS BFS simple, Dijkstra
Source données TMDB Wikidata, IMDb

Scoring (mode challenge)

  • Base : (6 - degrés) × 100 points
  • Bonus temps : +50 pts si trouvé en moins d'1 minute
  • Bonus rareté : +50 pts si le chemin inclut un titre peu populaire