Estoy usando la biblioteca TypeScript "Automapper" en mi backend NestJS para convertir una respuesta de MongoDb/ Mongoose en un DTO. Así es como se ve la respuesta:
{ "_id": "mongo-object-id", "widgets": [ { "id": "UUID", "type": "IMAGE", "zIndex": "0", "position": { "x": 1, "y": 2 }, "pinned": false, "height":500, "width":1000 }, { "id": "UUID", "type": "CONVERSATION", "zIndex": "1", "position": { "x": 3, "y": 7 }, "pinned": false, "participants": ["UUID1","UUID2"] } ] }
Mi problema es que no sé cómo convertir las entradas de la matriz de "widgets" en diferentes DTO (ImageDTO, ConversationDTO) según el atributo/discriminador "tipo".
¿Cómo puedo solucionar eso?
Actualmente uso lo siguiente:
mapper.createMap(MeetingSpace, MeetingSpaceDto).forMember( (destination) => destination.widgets, mapWith(WidgetDto, Widget, (source) => source.widgets) );
Pero tengo que encontrar una manera de asignar un "Widget" a un "ImageDto" o "ConversationDto" debido al "tipo".
mapWith(ImageDto, Widget, (source) => source.widgets) mapWith(ConversationDto, Widget, (source) => source.widgets)
Sé que esto es un poco tarde, pero me encontré con la misma necesidad.
Debe definir la asignación de Widget a ImageDTO
createMap(mapper, Widget, ImageDTO);
Luego use la función de mapa en la colección:
return source.widgets.map(widget => mapper.map(widget, Widget, ImageDTO);