diff --git a/packages/server/src/api/controllers/row.js b/packages/server/src/api/controllers/row.js index 1c038f0194..904dd08ed1 100644 --- a/packages/server/src/api/controllers/row.js +++ b/packages/server/src/api/controllers/row.js @@ -57,13 +57,15 @@ exports.patch = async function(ctx) { let row = await db.get(ctx.params.id) const table = await db.get(row.tableId) const patchfields = ctx.request.body - row = coerceRowValues(row, table) + // need to build up full patch fields before coerce for (let key of Object.keys(patchfields)) { if (!table.schema[key]) continue row[key] = patchfields[key] } + row = coerceRowValues(row, table) + const validateResult = await validate({ row, table, @@ -89,6 +91,8 @@ exports.patch = async function(ctx) { // Creation of a new user goes to the user controller if (row.tableId === ViewNames.USERS) { + // the row has been updated, need to put it into the ctx + ctx.request.body = row await usersController.update(ctx) return } @@ -157,6 +161,8 @@ exports.save = async function(ctx) { // Creation of a new user goes to the user controller if (row.tableId === ViewNames.USERS) { + // the row has been updated, need to put it into the ctx + ctx.request.body = row await usersController.create(ctx) return } diff --git a/packages/server/src/api/controllers/user.js b/packages/server/src/api/controllers/user.js index 9ef7c2281f..fcb4c34319 100644 --- a/packages/server/src/api/controllers/user.js +++ b/packages/server/src/api/controllers/user.js @@ -64,15 +64,13 @@ exports.create = async function(ctx) { exports.update = async function(ctx) { const db = new CouchDB(ctx.user.appId) const user = ctx.request.body - const dbUser = await db.get(ctx.request.body._id) if (user.password) { user.password = await bcrypt.hash(user.password) } else { delete user.password } - const newData = { ...dbUser, ...user } - const response = await db.put(newData) + const response = await db.put(user) user._rev = response.rev ctx.status = 200