From c825e7af06218bded234c0cdae42890bfc66142d Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Thu, 16 Mar 2017 20:20:19 -0400 Subject: [PATCH] allow changing id --- README.md | 4 ++-- lib/dbwrap.js | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 314e1d2..afd81c5 100644 --- a/README.md +++ b/README.md @@ -81,10 +81,10 @@ API It's kinda CRUDdy... but don't let that scare you. -* `upsert(id, data)` - creates or updates based on existence in DB (use this) +* `upsert(id, data[, oldId])` - creates or updates based on existence in DB (use this) * modifies `createdAt` and or `updatedAt` * `create(id, obj)` - same as above, but fails if the object exists -* `save(data)` - (just don't use this, please) creates or updates based on presence of ID +* `save(data[, oldId])` - (just don't use this, please) creates or updates based on presence of ID * `destroy(id)` - mark a record as `deletedAt` from DB * `get(id)` - grab one by id * `find(attrs, opts)` - grab many by indexable attributes diff --git a/lib/dbwrap.js b/lib/dbwrap.js index 45d0954..a594867 100644 --- a/lib/dbwrap.js +++ b/lib/dbwrap.js @@ -303,13 +303,13 @@ function wrap(db, dir, dbsMap) { }).then(simpleParse); }; - DB.upsert = function (id, data) { + DB.upsert = function (id, data, oldId) { if (!data) { data = id; id = data[idnameCased]; } - return DB.set(id, data).then(function (result) { + return DB.set(oldId || id, data, oldId).then(function (result) { var success = result.changes >= 1; if (success) { @@ -320,8 +320,8 @@ function wrap(db, dir, dbsMap) { }); }; - DB.save = function (data) { - if (!data[idnameCased]) { + DB.save = function (data, oldId) { + if (!data[idnameCased] && !oldId) { // NOTE saving the id both in the object and the id for now var UUID = require('node-uuid'); data[idnameCased] = UUID.v4(); @@ -331,7 +331,7 @@ function wrap(db, dir, dbsMap) { }); } - return DB.set(data[idnameCased], data).then(function (result) { + return DB.set(oldId || data[idnameCased], data, oldId).then(function (result) { var success = result.changes >= 1; if (success) { @@ -396,7 +396,7 @@ function wrap(db, dir, dbsMap) { }; // pull indices from object - function strainUpdate(id, data/*, vals*/, cb) { + function strainUpdate(id, data/*, vals*/, cb, oldId) { var fieldable = []; var json; var sql; @@ -441,7 +441,9 @@ function wrap(db, dir, dbsMap) { delete data[camelCase(col.name)]; }); - delete data[idnameCased]; + if (!oldId) { + delete data[idnameCased]; + } if (!fieldable.length || Object.keys(data).length) { json = JSON.stringify(data); @@ -467,7 +469,7 @@ function wrap(db, dir, dbsMap) { return sql; } - DB.set = function (id, obj) { + DB.set = function (id, obj, oldId) { obj.updatedAt = Date.now(); var json = JSON.stringify(obj); @@ -485,7 +487,7 @@ function wrap(db, dir, dbsMap) { //var vals = []; // removes known fields from data data.updated_at = Date.now(); - var sql = strainUpdate(id, data/*, vals*/, sqlTpl); + var sql = strainUpdate(id, data/*, vals*/, sqlTpl, oldId); //console.log('[debug] DB.set() sql:', sql); db.run(sql, /*vals*/[], function (err) {