Aller au contenu principal

28-1 Création (Create)

Commençons par créer un événement via l'API.

Coquille Contrôleur/Service/Repository

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

Contrôleur - EvenementsController#Create

Pour créer un événement via l'API, il sera nécessaire d'avoir une action d'API répondant à la méthode HTTP POST et recevant en paramètre un DTO de type CreerEvenementDto.

  1. Créez une classe CreerEvenementDto dans le dossier Dtos/Evenements du projet Application.

    Snowfall.Application/Dtos/Evenements/CreerEvenementDto.cs
    namespace Snowfall.Application.Dtos.Evenements;

    public class CreerEvenementDto
    {
    public required string Nom { get; set; }
    public string? Description { get; set; }
    public string? ImagePath { get; set; }
    public DateTime Date { get; set; }
    public Decimal Prix { get; set; }
    public int Capacite { get; set; }
    public int VilleId { get; set; }
    }
  2. Ajoutez une entré pour AutoMapper

    Snowfall.Web.Api/Configurations/AutoMapperConfig.cs
    public class AutoMapperConfig : Profile
    {
    public AutoMapperConfig()
    {
    CreateMap<Evenement, EvenementDto>().ReverseMap();
    CreateMap<CreerEvenementDto, Evenement>();
    CreateMap<Ville, VilleDto>().ReverseMap();
    }
    }
    info

    On fait la mappage de façon unidirectionnelle, ça ne fait pas de sens de faire le mapping inverse.

  3. Créez la coquille de la fonction Create au niveau du contrôleur EvenementsController

    Snowfall.Web.Api/Controllers/EvenementsController.cs
    /// <summary>
    /// POST /api/evenements
    /// Permets de créer un événement.
    /// </summary>
    /// <param name="creerEvenementDto">Le DTO d'événement contenant les informations de l'événement à créer</param>
    /// <returns>L'événement créé</returns>
    [HttpPost]
    public async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
    {
    throw new NotImplementedException();
    }

Repository - EvenementRepository#Create

Dans un second temps, ajoutons à l'interface du repository la fonction Create qui prend en paramètre un événement et retourne l'événement créé.

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);
}

Ensuite, il est possible de faire Implement missing members à partir de l'aide contextuelle de Rider dans la classe EvenementRepository. Cela ajoutera la fonction Create à l'implémentation du repository.

Snowfall.Data/Repositories/EvenementRepository.cs
public async Task<Evenement> Create(Evenement evenement)
{
throw new NotImplementedException();
}
attention

Vous devez implémenter vous-même le détail de la fonction de création du repository, soit l'insertion dans la base de données. Comme point de départ, vous pouvez vous baser sur la fonction de création de questions.

Service EvenementService#Create

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

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);
}

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

Snowfall.Application/Services/EvenementService.cs
public async Task<Evenement> Create(Evenement evenement)
{
return await _evenementRepository.Create(evenement);
}

Compléter EvenementController#Create

Si vous avez complété la requête SQL au niveau du repository pour la sauvegarde, nous avons tous les éléments en place pour compléter la fonction Create du contrôleur d'événements.

  1. Premièrement, on map le DTO reçu en Evenement pour être en mesure d'envoyer le tout à la couche Service.
    Snowfall.Web.Api/Controllers/EvenementsController.cs
    public async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
    {
    Evenement evenement = _mapper.Map<Evenement>(creerEvenementDto);
    }
  2. Ensuite, on appelle la couche service pour créer et retourner l'événement.
    Snowfall.Web.Api/Controllers/EvenementsController.cs
    public async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
    {
    Evenement evenement = _mapper.Map<Evenement>(creerEvenementDto);

    evenement = await _evenementService.Create(evenement);
    }
  3. Pour finir, on retourne l'événement créé en s'assurant de faire le mappage en DTO.
    Snowfall.Web.Api/Controllers/EvenementsController.cs
    public async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
    {
    Evenement evenement = _mapper.Map<Evenement>(creerEvenementDto);

    evenement = await _evenementService.Create(evenement);

    return Ok(_mapper.Map<EvenementDto>(evenement));
    }

Tester via Postman ou Scalar

attention

Assurez-vous d'avoir implémenté le détail de la fonction d'insertion Create du repository!

Pour tester, vous pouvez utiliser Postman ou Scalar. Dans le cas de Postman:

  • Assurez-vous que votre projet .NET est démarré et recompilé pour contenir les derniers changements
  • Assurez-vous de choisir POST comme méthode HTTP
  • Entrez comme URL http://[url-de-votre-projet]/api/evenements
  • Sélectionner Body/raw/JSON et entrer le JSON pour soumettre un nouvel événement.
astuce

Pour obtenir rapidement la version JSON du DTO attendu, vous pouvez utiliser Scalar.

img

Remarquez que vous pouvez faire le test via Scalar directement!

Ensuite, utiliser Postman pour soumettre la requête. Si tout se passe bien, vous recevrez une réponse 200 OK et l'événement nouvellement créé au format JSON.

Imgur