Toma como parâmetro um objeto stringificado e outro objeto, converte, mapeia e retorna o objeto stringificado com as propriedades corrigidas. Propriedades vazias ou desconexas são descartadas.
Sem mapeador:
constexample:Example= { data: "{\"name\": \"example\",\"description\": \"this is an example\",\"extra\": \"\",\"size\": \"123\", \"price\": 100}",
};constinputData:IExampleDTO= { name:undefined, description:"this is a new description", extra:"this is an extra", size:undefined, price:20,};constupdatedData=JSON.parse(example.data);if (inputData.name) {updatedData.name =inputData.name;}if (inputData.description) {updatedData.description =inputData.description;}if (inputData.extra) {updatedData.extra =inputData.extra;}if (inputData.size) {updatedData.size =inputData.size;}if (inputData.price) {updatedData.price =inputData.price;}awaitthis.examplesRepository.update( {...example, data:JSON.stringify(updatedData), }, trx,);output => example.data = "{\"name\": \"example\",\"description\": \"this is a new description\",\"extra\": \"this is an extra\",\"size\": \"123\", \"price\": 20}";
Usando mapeador:
import { patchString } from"@utils/mappers";constexample:Example= { data: "{\"name\": \"example\",\"description\": \"this is an example\",\"extra\": \"\",\"size\": \"123\", \"price\": 100}",
}constinputData:IExampleDTO= { name:undefined, description:"this is a new description", extra:"this is an extra", size:undefined, price:20,};awaitthis.examplesRepository.update( {...example, data:patchString(example.data, inputData), }, trx,);output => example.data = "{\"name\": \"example\",\"description\": \"this is a new description\",\"extra\": \"this is an extra\",\"size\": \"123\", \"price\": 20}";