1
resposta

[Dúvida] Profile

Por qual motivo no profile, nos dois ultimos CreateMap a ordem é de Filme para UpdateFilmeDto e de filme para ReadFilmeDto e não ao contrario como nos outros? Pq assim:

        CreateMap<CreateFilmeDto, Filme>();
        CreateMap<UpdateFilmeDto, Filme>();
        CreateMap<Filme, UpdateFilmeDto>();
        CreateMap<Filme, ReadFilmeDto>();

E não assim:

        CreateMap<CreateFilmeDto, Filme>();
        CreateMap<UpdateFilmeDto, Filme>();
        CreateMap<UpdateFilmeDto, Filme>();
        CreateMap<ReadFilmeDto, Filme>();
1 resposta

Os dois parâmetros genéricos do método CreateMap são Tipo de Origem e o Tipo de Destino, exatamente nessa ordem. Quando você faz isso, por exemplo:

CreateMap<CreateFilmeDto, Filme>();

Você está criando um mapeamento onde CreateFilmeDto (Origem) será mapeado para Filme (Destino). Isso é uma prática comum. Muitas vezes você não vai querer expor sua classe de domínio (ou de dados, dependendo da estrutura do seu projeto) para o consumidor da API, então você usa esse objeto de transferência (DTO). No caso de cima, é isso que está acontecendo.

Mas essa é uma preocupação bidirecional, ou seja, você quer proteger suas camadas seja quando o consumidor da API está enviando dados para você (enviando os dados para criar um filme, como no exemplo acima), mas também vai querer proteger quando você estiver enviando informações pra ele - no caso dele fazer uma busca para recuperar os dados cadastrados de determinado filme, por exemplo.

Nesse caso, você tem o seu Filme cadastrado. E para não expor essa entidade Filme, cria um DTO (que foi chamado de ReadFilmeDto). Mas repare que agora o seu Filme é a origem, não mais o destino, por isso você inverte no profile do AutoMapper, ficando assim:

CreateMap<Filme, ReadFilmeDto>();

Origem = Filme

Destino = ReadFilmeDto

Em termos mais práticos, você está:

Pegando o Filme cadastrado e mapeando ele para um ReadFilmeDto para retornar para o consumidor da API.