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 4

Le lien du discord est : https://discord.gg/rQqXeVpk62

Cette semaine nous allons ajouter une boutique dans le jeu.

Version du front : https://csharp.nouvet.fr/front4/

Boutique

La boutique listera les objets disponible à l’achat. Le joueur pourra acheter des objets pour augmenter sa valeur de click.

Lors du reset, le joueur perdra tous ses objets achetés.

Objets

Les objets seront stockés dans la table Item de la BDD. Cf Modèle de donné en base de page.

Inventaire

L’inventaire sera stocké dans la table Inventories de la BDD. Cf Modèle de donné en base de page.

Achats

Lorsque l’utilisateur achète un objet, il sera ajouté à son inventaire. Si l’objet est déjà dans l’inventaire, sa quantité sera augmentée. Si l’objet n’est pas dans l’inventaire, il sera ajouté.

La valeur totalClickValue de la progression sera augmentée de la valeur clickValue de l’objet acheté.

Reset

Lors du reset, les objets de l’inventaire seront vidés. La valeur totalClickValue de la progression sera réinitialisée à 0.

Click

Lorsque l’utilisateur clique, la valeur totalClickValue de la progression sera mulitpliée par la valeur multiplier de la progression pour calculer combien de clic sera ajouté au compteur.

Controller Inventory

Vous devrez créer un controlleur InventoryController qui sera chargé de gérer les interactions avec l’inventaire.

Seed la base de données avec les objets

On va ajouter une route qui permet de remplir la table Item de la BDD avec des données des objets.

Dans un premier temps l’appel à cette route vide la table Item et la table Inventories puis insert des objets en base de données.

Dans un second temps vous utiliser le HttpClient pour récupérer les objets depuis le fichier items.json et les insérer dans la table Item.

Le fichier se trouve sur https://csharp.nouvet.fr/front4/items.json

Vous trouverez des exemples de HttpClient dans la documentation sur les HttpClient.

Game Server API Documentation

Les champs commence par une minuscules ici, mettez les bien en PascalCase dans votre code.

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


User Endpoints


Seed Inventory

Vide les objets de la db et des inventaires des utilisateurs puis insert des objets en base de données.

GET /api/Inventory/Seed

Body: {}

Returns: boolean

Errors:

  • 400 - SEED_FAILED - Failed to seed inventory (optionnel)

Liste des objets disponibles à l’achat

Liste tout les objets disponibles à l’achat.

GET /api/Inventory/Items

Body: {}

Returns: Item[]

Errors:

  • 404 - NO_ITEMS - No items found

Liste des objets dans l’inventaire d’un utilisateur

Liste tout les objets dans l’inventaire d’un utilisateur.

GET /api/Inventory/UserInventory/{userId}

Body: {}

Returns: InventoryEntry[]

Errors:


Achat d’un objet

Achete un objet pour un utilisateur. L’objet sera ajouté à l’inventaire de l’utilisateur. La valeur totalClickValue de la progression sera augmentée de la valeur clickValue de l’objet acheté. Puis retourne l’inventaire de l’utilisateur.

POST /api/Inventory/Buy/{userId}/{itemId}

Body: {}

Returns: InventoryEntry[]

Errors:

  • 400 - NOT_ENOUGH_MONEY - Not enough money to buy the item
  • 400 - ITEM_NOT_FOUND - Item not found
  • 400 - INVENTORY_FULL - Inventory is full
  • 400 - USER_NOT_FOUND - User not found

Data Models

Item

{
  "id": "integer",
  "name": "string",
  "price": "integer",
  "maxQuantity": "integer",
  "clickValue": "integer"
}

InventoryEntry

{
  "id": "integer",
  "userId": "integer",
  "itemId": "integer",
  "quantity": "integer"
}

Progression

{
  "id": "integer",
  "userId": "integer",
  "count": "integer",
  "totalClickValue": "integer",
  "multiplier": "integer",
  "bestScore": "integer"
}