Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Semaine 8

Cette semaine nous allons optimiser notre application avec des fonctionnalités avancées pour la rapprocher d’un projet de production.

Lien du front : http://csharp.nouvet.fr/front8/

Rate Limiting

Pour éviter la triche (autoclickers) et protéger le serveur, nous allons limiter le nombre de requêtes possibles sur l’action de click.

Je vous invite à lire la partie sur le Rate Limiting dans le cours Ici.

Configuration

Vous devrez configurer un FixedWindowLimiter dans votre Program.cs. La limite sera de 10 clics toutes les 10 secondes.

Application

Cette limite devra s’appliquer uniquement sur la route GET /api/Game/Click. Si un utilisateur dépasse cette limite, il devra recevoir une erreur 429 Too Many Requests.

La limite doit être par utilisateur. Si Alice spamme, Bob ne doit pas être bloqué.

Revenu Passif

Nous allons ajouter une fonctionnalité de revenu passif. Même quand le joueur ne clique pas, son score doit augmenter légèrement avec le temps.

Je vous invite à lire la partie sur les Background Services dans le cours Ici.

Service

Vous devrez créer un service PassiveIncomeService qui tourne en tâche de fond (Background Service). Ce service devra ajouter 1 point au score de tous les utilisateurs toutes les 30 secondes.

Vous afficherez un log dans la console à chaque distribution de points.

Attention à la gestion de la portée (Scope) de vos services. Un BackgroundService est un Singleton, il ne peut pas injecter directement le DbContext qui est Scoped.

Test Coverage

Maintenant que vous avez des tests unitaires (Semaine 7), il est intéressant de savoir quelle proportion de votre code est réellement testée.

Je vous invite à lire la partie sur le Code Coverage dans le cours Ici.

Rapport

Vous devrez générer un rapport de couverture HTML pour votre projet. Vous utiliserez coverlet (inclus de base) et reportgenerator.

L’objectif n’est pas d’atteindre 100%, mais de visualiser les fichiers non testés.

Game Server API Documentation

Base URL: http://localhost:5000/api


Game Endpoints

Click

GET /api/Game/Click

Returns:

{
  "count": "integer",
  "multiplier": "integer"
}

Errors:

  • 400 - NO_PROGRESSION - User does not have a progression
  • 429 - TOO_MANY_REQUESTS - Rate limit exceeded