Fixing some issues found with users and row updates, specifically relationships and numbers.

This commit is contained in:
mike12345567 2021-02-05 12:23:29 +00:00
parent 1a80b09fd0
commit 4b2b375512
2 changed files with 8 additions and 4 deletions

View File

@ -57,13 +57,15 @@ exports.patch = async function(ctx) {
let row = await db.get(ctx.params.id) let row = await db.get(ctx.params.id)
const table = await db.get(row.tableId) const table = await db.get(row.tableId)
const patchfields = ctx.request.body 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)) { for (let key of Object.keys(patchfields)) {
if (!table.schema[key]) continue if (!table.schema[key]) continue
row[key] = patchfields[key] row[key] = patchfields[key]
} }
row = coerceRowValues(row, table)
const validateResult = await validate({ const validateResult = await validate({
row, row,
table, table,
@ -89,6 +91,8 @@ exports.patch = async function(ctx) {
// Creation of a new user goes to the user controller // Creation of a new user goes to the user controller
if (row.tableId === ViewNames.USERS) { 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) await usersController.update(ctx)
return return
} }
@ -157,6 +161,8 @@ exports.save = async function(ctx) {
// Creation of a new user goes to the user controller // Creation of a new user goes to the user controller
if (row.tableId === ViewNames.USERS) { 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) await usersController.create(ctx)
return return
} }

View File

@ -64,15 +64,13 @@ exports.create = async function(ctx) {
exports.update = async function(ctx) { exports.update = async function(ctx) {
const db = new CouchDB(ctx.user.appId) const db = new CouchDB(ctx.user.appId)
const user = ctx.request.body const user = ctx.request.body
const dbUser = await db.get(ctx.request.body._id)
if (user.password) { if (user.password) {
user.password = await bcrypt.hash(user.password) user.password = await bcrypt.hash(user.password)
} else { } else {
delete user.password delete user.password
} }
const newData = { ...dbUser, ...user }
const response = await db.put(newData) const response = await db.put(user)
user._rev = response.rev user._rev = response.rev
ctx.status = 200 ctx.status = 200