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!
-
Créer un DTO
VilleDto. Sous le projetSnowfall.Application, sous le dossierDtos, créez un autre dossierVillespuis ajoutez une classeVilleDtoSnowfall.Application/Dtos/Villes/VilleDto.cspublic class VilleDto
{
public int Id { get; set; }
public required string Nom { get; set; }
public required string PaysIso { get; set; }
} -
Ajouter la propriété
Ville, faisant référence àVilleDtodans le DTOEvenementDtoSnowfall.Application/Dtos/Evenements/EvenementDto.cspublic 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; }
}infoRemarquez que
VilleIda été retiré, nous n'en avons plus besoin puisque VilleDto contient cette donnée. -
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:
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.