29-5 Création
Il ne reste qu'à sauvegarder les données! 😅
La première étape sera de nous assurer que EvenementHttpClient
contient une fonction pour interagir avec l'API et soumettre un POST
.
Créer la fonction EvenementClient#CreerEvenement
Notre lien avec l'API est toujours la classe HttpClient
, en l'occurrence ici EvenementHttpClient
. Nous allons donc créer une fonction CreerEvenement
qui sera responsable de faire un POST
à l'API pour créer l'événement.
public async Task<EvenementDto?> CreerEvenement(CreerEvenementDto creerEvenementDto)
{
throw new NotImplementedException();
}
On complètera la fonction dans les prochaines étapes.
Appeler le HttpClient lors de l'envoi du formulaire
Lorsqu'on clic sur le bouton soumettre du formulaire, on ne veut pas simplement écrire dans la console! On veut plutôt communiquer avec l'API via le client.
- Premièrement, il faut injecter le client
EvenementHttpClient
dans le composant.Snowfall.Web.Admin/Pages/Evenements/New.razor@page "/evenements/new"
@using Microsoft.Extensions.Localization
@using Snowfall.Application.Dtos.Evenements
@using Snowfall.Application.Dtos.Villes
@using Snowfall.Web.Admin.HttpClients
@using Snowfall.Web.Admin.Resources
@inject IStringLocalizer<Resources.Evenements.New> Localizer;
@inject IStringLocalizer<SharedResources> LocalizerShared;
@inject VilleHttpClient VilleHttpClient;
@inject EvenementHttpClient EvenementHttpClient;
<!-- ... --> - Ensuite, on appelle le client pour créer l'événement lorsque la fonction
GererSubmit()
est appelée.Snowfall.Web.Admin/Pages/Evenements/New.razor<!-- ... -->
async Task GererSubmit()
{
var evenement = await EvenementHttpClient.CreerEvenement(_creerEvenementDto);
}
<!-- ... -->
Évidemment, si vous essayez, ça ne fonctionnera pas puisque la fonction du client retourne une exception NotImplementedException
.
Implémenter le détail de EvenementClient#CreerEvenement
Nous sommes prêts à implémenter la fonction CreerEvenement
de EvenementClient
.
/// <summary>
/// Permets de créer un événement en communiquant avec l'API
/// </summary>
/// <param name="creerEvenementDto">Le DTO de l'événement à créer</param>
/// <returns>Null ou l'événement créé</returns>
public async Task<EvenementDto?> CreerEvenement(CreerEvenementDto creerEvenementDto)
{
// L'événement est null par défaut, à moins que l'appel à l'API soit un succès
EvenementDto? evenement = null;
// Communication avec l'API via PostAsJsonAync. On envoie le DTO.
var response = await _client.PostAsJsonAsync(BaseApiUrl, creerEvenementDto);
// Si la réponse est un succès, on assigne le retour à l'événement
if (response.IsSuccessStatusCode)
{
evenement = await response.Content.ReadFromJsonAsync<EvenementDto>();
}
// Retourne null ou l'événement dans le cas d'un succès
return evenement;
}
essentiellement, ce qui nous intéresse d'un point de vue purement client est: est-ce que la sauvegarde a réussi, oui ou non?
En effet, du côté client, on ne fera pas de traitement différent que l'erreur soit: 500, 400, etc.
C'est pourquoi on vérifie simplement si la réponse est dans la catégorie des réponses "succès" (2xx).
Test
Essayez de soumettre le formulaire, le tout devrait fonctionner.
Vous n'aurez pas de rétroaction, il vous faudra retourner à la page d'accueil de gestion des événements pour voir si l'événement a bien été créé. Vous pouvez aussi regarder directement dans la base de données.