Pgpool update variable quantity of fields

45 Views Asked by At

I have an update request with variable quantity of fields. Is there a better way to do this? Now my code is look like so:

router.put('/:id', authenticateToken, async (req,res)=>{
  try {
    console.log(req.method,req.originalUrl)
    process.env.DEBUG && console.log('req.body', req.body)
    
    let keys = Object.keys(req.body), fields='', numbers='', values=[]
    
    keys.forEach((key, index) => {
      if (key !== 'id') {
        fields+= key
        fields+= (index === keys.length-1) ? '':','
        numbers+= `$${index+1}`,
        numbers+= (index === keys.length-1) ? '':','
      }
      values.push(req.body[`${key}`])
    })

    let data = null
    if (keys.length !== 2)
        data = await pool.query(`UPDATE users SET (${fields}) = (${numbers}) WHERE id=($1) RETURNING *`, values)
    else // if only one field to update
        data = await pool.query(`UPDATE users SET ${fields} = ${numbers} WHERE id=($1) RETURNING *`, values)

    process.env.DEBUG && console.log('data',data.rows[0])
    res.json(data.rows[0])
  } catch (error) {
    res.status(500).json({error: error.message})
  }
})
0

There are 0 best solutions below