Aller au contenu principal

27-2 Récupérer la ville dans le DTO

Au départ, nous avons gardé le DTO (objet simple responsable de retourner l'information en provenance de l'API) le plus simple possible pour n'inclure que le id de la ville, mais au fond on voudra retourner la ville associée.

Ce sera plus logique plutôt que de faire un second appel d'API pour obtenir la ville associée à chaque événement.

Créer un DTO VilleDto

Pour contenir les informations de la ville dans le DTO de EvenementDto, on utilisera aussi un DTO. Un DTO dans un DTO!

  1. Créer un DTO VilleDto. Sous le projet Snowfall.Application, sous le dossier Dtos, créez un autre dossier Villes puis ajoutez une classe VilleDto

    Snowfall.Application/Dtos/Villes/VilleDto.cs
    public class VilleDto
    {
    public int Id { get; set; }
    public required string Nom { get; set; }
    public required string PaysIso { get; set; }
    }
  2. Ajouter la propriété Ville, faisant référence à VilleDto dans le DTO EvenementDto

    Snowfall.Application/Dtos/Evenements/EvenementDto.cs
    public class EvenementDto
    {
    public int Id { get; set; }
    public 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 VilleDto? Ville { get; set; }
    }
    info

    Remarquez que VilleId a été retiré, nous n'en avons plus besoin puisque VilleDto contient cette donnée.

  3. Modifier la table pour faire référence à la ville.

    Snowfall.Web.Admin/Pages/Evenements/Components/EvenementListe.razor
    @foreach (EvenementDto evenement in Evenements)
    {
    <tr>
    <td>@evenement.Id</td>
    <td>@evenement.Nom</td>
    <td>@evenement.Ville?.Nom</td>
    </tr>
    }

Si vous lancez l'application et tentez d'accéder à la liste d'événements, une erreur vous attend:

!!! |  +- Missing type map configuration or unsupported mapping.

Mapping types:
Ville -> VilleDto
Snowfall.Domain.Models.Ville -> Snowfall.Application.Dtos.Villes.VilleDto

Destination Member:
Ville

C'est AutoMapper qui nous informe qu'il ne sait pas comment mapper ensemble Ville et VilleDto.

Il faut ajouter dans la configuration de AutoMapper cette association:

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

Tout devrait fonctionner maintenant et afficher la ville de l'événement dans la table.