|
|
|
@ -27,6 +27,23 @@ exports.create = async function(ctx) { |
|
|
|
const result = await db.post(newModel) |
|
|
|
newModel._rev = result.rev |
|
|
|
|
|
|
|
const { schema } = ctx.request.body |
|
|
|
for (let key in schema) { |
|
|
|
// model has a linked record
|
|
|
|
if (schema[key].type === "link") { |
|
|
|
// create the link field in the other model
|
|
|
|
const linkedModel = await db.get(schema[key].modelId); |
|
|
|
linkedModel.schema[newModel.name] = { |
|
|
|
type: "link", |
|
|
|
modelId: newModel._id, |
|
|
|
constraints: { |
|
|
|
type: "array" |
|
|
|
} |
|
|
|
} |
|
|
|
await db.put(linkedModel); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const designDoc = await db.get("_design/database") |
|
|
|
designDoc.views = { |
|
|
|
...designDoc.views, |
|
|
|
@ -50,7 +67,9 @@ exports.update = async function() {} |
|
|
|
exports.destroy = async function(ctx) { |
|
|
|
const db = new CouchDB(ctx.params.instanceId) |
|
|
|
|
|
|
|
await db.remove(ctx.params.modelId, ctx.params.revId) |
|
|
|
const modelToDelete = await db.get(ctx.params.modelId); |
|
|
|
|
|
|
|
await db.remove(modelToDelete) |
|
|
|
const modelViewId = `all_${ctx.params.modelId}` |
|
|
|
|
|
|
|
// Delete all records for that model
|
|
|
|
@ -59,6 +78,17 @@ exports.destroy = async function(ctx) { |
|
|
|
records.rows.map(record => ({ id: record.id, _deleted: true })) |
|
|
|
) |
|
|
|
|
|
|
|
// Delete linked record fields in dependent models
|
|
|
|
for (let key in modelToDelete.schema) { |
|
|
|
const { type, modelId } = modelToDelete.schema[key]; |
|
|
|
if (type === "link") { |
|
|
|
const linkedModel = await db.get(modelId); |
|
|
|
delete linkedModel.schema[modelToDelete.name] |
|
|
|
await db.put(linkedModel) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// delete the "all" view
|
|
|
|
const designDoc = await db.get("_design/database") |
|
|
|
delete designDoc.views[modelViewId] |
|
|
|
|