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 dossierVilles
puis ajoutez une classeVilleDto
Snowfall.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 àVilleDto
dans le DTOEvenementDto
Snowfall.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
VilleId
a é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.