Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

206
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda