Aller au contenu principal

28-4 Suppression (Delete)

Dernier arrêt, être en mesure de supprimer des événements via l'API!

Coquille Contrôleur/Service/Repository

Pour procéder à une suppression d'événement, le contrôleur d'API recevra la requête HTTP à traiter, appellera ensuite le service EvenementService qui pour sa part appellera la couche de données via EvenementRepository pour supprimer les données.

Contrôleur - EvenementsController#Delete

Pour supprimer un événement via l'API, il sera nécessaire d'avoir une action d'API répondant à la méthode HTTP DELETE et recevant en paramètre le id de l'événement à supprimer.

Snowfall.Web.Api/Controllers/EvenementsController.cs
/// <summary>
/// DELETE /api/evenements/{id}
/// Permets de supprimer un événement
/// </summary>
/// <param name="id">Le id de l'événement à supprimer</param>
/// <returns></returns>
[HttpDelete("{id:int}")]
public async Task<IActionResult> Delete(int id)
{
throw new NotImplementedException();
}

Repository EvenementRepository#Delete

Dans un second temps, ajoutons à l'interface du repository la fonction Delete qui prend en paramètre un événement et retourne si la suppression a été un succès.

Snowfall.Data/Repositories/IEvenementRepository.cs
public interface IEvenementRepository
{
Task<List<Evenement>> GetAll();
Task<List<Evenement>> FindByVilleId(int villeId);
Task<Evenement?> FindById(int id);
Task<Evenement> Create(Evenement evenement);
Task<bool> Update(Evenement evenement);
Task<bool> Delete(int id);
}

Ensuite, il est possible de faire Implement missing members à partir de l'aide contextuelle de Rider dans la classe EvenementRepository.

Snowfall.Data/Repositories/EvenementRepository.cs
public async Task<bool> Delete(int id)
{
throw new NotImplementedException();
}
attention

Vous devez implémenter vous-même le détail de la fonction de suppression du repository, soit de supprimer l'entrée dans la base de données. Vous pouvez vous baser sur la fonction de suppression de question.

Service - EvenementService#Delete

Finalement, dans l'interface IEvenementService, on ajoute la fonction Delete:

Snowfall.Application/Services/IEvenementService.cs
public interface IEvenementService
{
Task<List<Evenement>> GetAll();
Task<List<Evenement>> FindByVilleId(int? villeId);
Task<Evenement?> FindById(int id);
Task<Evenement> Create(Evenement evenement);
Task<bool> Update(Evenement evenement);
Task<bool> Delete(int id);
}

Pour ensuite implémenter via Implement missing members la fonction dans EvenementService et appeler le repository.

Snowfall.Application/Services/EvenementService.cs
public async Task<bool> Delete(int id)
{
return await _evenementRepository.Delete(id);
}

Compléter EvenementController#Delete

Le détail de la fonction sera très simple dans ce cas-ci. En effet, si supprimer l'événement est un succès, on retourne 200 Ok. Si la suppression n'a pas fonctionné, c'est fort probablement puisque le id n'existe pas: la requête de suppression est extrêmement simple. On retournera dans ce cas 404 Not Found.

Snowfall.Web.Api/Controllers/EvenementsController.cs
public async Task<IActionResult> Delete(int id)
{
bool resultat = await _evenementService.Delete(id);

return resultat ? Ok() : NotFound();
}

Tester via Postman

attention

Assurez-vous d'avoir implémenté la fonction de suppression Delete du repository!

Pour tester, vous pouvez utiliser Postman ou Scalar.

  • Assurez-vous que votre projet .NET est démarré et recompilé pour contenir les derniers changements
  • Assurez-vous de choisir DELETE comme méthode
  • Entrez comme URL http://[url-de-votre-projet]/api/evenements/[id-evenement]

Imgur

Voilà, vous avez une API fonctionnelle permettant de faire la gestion complète des événements!

Imgur