Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

209
Visualizações
¿Hay alguna forma de asignar campos con diferentes nombres en NestJS?

Actualmente estoy trabajando en una aplicación NestJS que se comunica con SAP (y algunas otras aplicaciones externas) y, lamentablemente, SAP requiere algunos campos con nombres muy específicos. Para ser precisos, en algunos casos, necesito enviarle más de 70 campos y, en otros casos, una solicitud puede devolver más de 280 campos.

Como no puedo modificar SAP, me veo obligado a trabajar con campos que van en contra de los patrones de nombres de mi aplicación (camelCase y readable), ya que SAP usa SCREAMING_SNAKE_CASE con abreviaturas, números e incluso algunas palabras que mezclan palabras en inglés y alemán.

Ahora, sé que hay algunos enfoques no tan prácticos para esto (como analizar cada campo individualmente), pero ¿hay alguno que me ahorre tiempo o al menos haga que todo sea más limpio sin tener que analizar los campos manualmente?

Editar: aquí hay un ejemplo de lo que SAP devuelve a mi aplicación

 PLNT_FABRIZIEREN_C: '253D', MRKD_PRODUCTS: ['PRODUCT1', 'PRODUCT2'], NEUES_PRDKT: TRUE

Y el equivalente en mi aplicación:

 factoryPlantCode: '253D', markedProducts: ['PRODUCT1', 'PRODUCT2'], isNewProduct: true

Necesito cambiar por completo el nombre de un campo cuando lo guardo en mi aplicación, por lo que sigo usando camelCase, pero lo devuelvo con el nombre que SAP conoce.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puedes probar algo como esto. Todo lo que necesita hacer es agregar las claves de SAP en clave y establecer el valor como la clave que desea usar en su aplicación.

 const mappings = { PLNT_FABRIZIEREN_C: "factoryPlantCode", MRKD_PRODUCTS: "markedProducts", NEUES_PRDKT: "isNewProduct" } const getFormattedVersion = (data) => { const returnData = {}; Object.keys(data).forEach(key => { returnData[mappings[key]] = data[key]; }) return returnData } const getSAPSupportedVersion = (data) =>{ const returnData = {}; Object.keys(data).forEach(key => { const mappingKeys = Object.keys(mappings) const mappingValues = Object.values(mappings) const mappedKey = mappingKeys[mappingValues.indexOf(key)]; returnData[mappedKey] = data[key]; }) return returnData } console.log( getFormattedVersion({ PLNT_FABRIZIEREN_C: '253D', MRKD_PRODUCTS: ['PRODUCT1', 'PRODUCT2'], NEUES_PRDKT: true }) ) console.log( getSAPSupportedVersion({ factoryPlantCode: "253D", isNewProduct: true, markedProducts: ["PRODUCT1", "PRODUCT2"] }) )
over 4 years ago · Santiago Trujillo Relatório

0

Gracias Sony Bamniya por responder a mi pregunta, pero pensé en otra forma de solucionar ese problema. Al usar el paquete class-transformer , pude cambiar el nombre de mis campos:

 @Expose({ name: 'factoryPlantCode' }) PLNT_FABRIZIEREN_C: string @Expose({ name: 'markedProducts' }) MRKD_PRODUCTS: string; @Expose({ name: 'isNewProduct' }) NEUES_PRDKT: boolean;

Todavía tenía el problema con los campos SCREAMING_SNAKE_CASE , pero eso fue fácil de arreglar: agregué un interceptor que analizó todos esos campos desde SCREAMING_SNAKE_CASE a camelCase usando lodash .camelCase y una iteración hecha a mano usando Object.entries(payload) . También vale la pena mencionar que mi DTO tiene un constructor:

 constructor(rawPayload) { Object.assign(this, rawPayload); }

Y después de llenar mi DTO, tuve que convertirlo en un objeto simple usando el método classToPlain() del transformador de clase (pude volver a analizarlo en un DTO después de analizarlo en simple, pero no lo necesitaba). ¡Espero que esto ayude a alguien!

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda