👹 Boss: Session Master
Bien que simple, il y a quelques lacunes dans l'implémentation actuelle de la session.
-
Lors de l'ajout au panier, faites en sorte que si l'item ajouté au panier n'existe pas dans la base de données, de retourner
BadRequest()
.[HttpPost]
public async Task<IActionResult> Create(PanierItemViewModel panierItem)
{
// 1. Vérifier que l'item à ajouter au panier existe bien (dans la bd)!
// 2. S'il est null, retourner `BadRequest()`
string itemSerialized = JsonSerializer.Serialize(panierItem);
HttpContext.Session.SetString("panier", itemSerialized);
return Ok();
}astuceVous aurez besoin de votre service d'événement! Ce service devrait déjà contenir une fonction vous permettant d'obtenir un événement par son
id
. -
Lors de l'ajout d'un item au panier, faites en sorte de rediriger vers l'action
Index
du panier plutôt que de retournerOk()
.astuceUtilisez la fonction
RedirectToAction()
. Cette dernière prend deux arguments:- Le nom d'une action
- Le nom d'un contrôleur
-
Dans la vue
Index
du panier, ajoutez un bouton, lié à une nouvelle action du contrôleur, qui permet de vider le panier.astuce- Vous pouvez utiliser un bouton dans un formulaire, effectuant une requête
POST
vers une nouvelle action du contrôleurPanier
. - Comme vous aurez deux actions
POST
dans le même contrôleur, vous devrez donner à cette nouvelle action une URL différente. La façon la plus facile est de prendre le nom de l'action lors de la définition de la route. Par exemple:[HttpPost("[action]")]
- La fonction
HttpContext.Session.Remove()
permet de retirer une clé en particulier de la session.
- Vous pouvez utiliser un bouton dans un formulaire, effectuant une requête
-
Lorsqu'on récupère l'item du panier dans
Index()
, il n'y a seulement qu'unid
dans leViewModel
. C'est normal, on ne veut pas stocker toutes les informations du produit dans le cookie (il y a une limite de taille au cookie!). Cependant, lors de l'affichage du panier, il nous faut ces informations supplémentaires, comme le nom de l'évéenement.- Créez une propriété optionnelle
Evenement? evenement
dansPanierViewModel
pour contenir l'événement derrière l'item de panier. - Dans
Index()
récupérez le détail de l'événement à partir de sonid
contenu dans le panier. Assignez l'événement à la propriété optionnelle duViewModel
public async Task<IActionResult> Index()
{
var panier = HttpContext.Session.GetString("panier");
if (panier != null)
{
var panierItem = JsonSerializer.Deserialize<PanierItemViewModel>(panier);
if (panierItem != null)
{
// Récupérer le détail de l'événement et assignez-le à la propriété optionnelle du `ViewModel`.
}
return View(panierItem);
}
return View();
}
astuceVous aurez besoin de votre service d'événement! Ce service devrait déjà contenir une fonction vous permettant d'obtenir un événement par son
id
.- Assurez-vous d'être en mesure d'afficher quelques informations sur l'événement dans le panier.
- Créez une propriété optionnelle