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
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 item400-ITEM_NOT_FOUND- Item not found400-INVENTORY_FULL- Inventory is full400-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"
}