UNPKG

bookshelf-soft-delete

Version:
67 lines (44 loc) 2.4 kB
# Bookshelf Soft Delete ![build status](https://travis-ci.org/lanetix/node-bookshelf-soft-delete.svg?branch=master) This plugin works with Bookshelf.js, available here http://bookshelfjs.org, in order to introduce a soft deletion. What this means is that items will appear deleted to an end user, but will not in fact be removed from the database. ## Installation npm install bookshelf-soft-delete Then in your bookshelf configuration: var bookshelf = require('bookshelf')(knex); bookshelf.plugin(require('bookshelf-soft-delete')); ## Usage On your bookshelf Model which you would like to mark for soft deletion: soft: true or, if you don't want to use the default column names (`deleted_at` and `restored_at`) : soft: ['deletionDate', 'restorationDate'] or, if you don't want to use `restored_at` column : soft: ['deleted_at'] Please note that strictly speaking any truthy value will be sufficient. This will override `destroy` to simply set the `deleted_at` column of the corresponding table to the Date stamp at moment of deletion, and override the collection `fetch` and `fetchOne` to filter out model instances where `deleted_at` is set. Please note, that if you set this on a Model, the table for which does not have a `deleted_at` column or an optional `restored_at` column, an `error` event will be emited when your model is created. If you wish to disable soft delete for a given operation, e.g., `fetch`, simply pass an object with `softDelete: false` to that operation. YourModel.where("id", searchId) .fetch({softDelete: false}) If you need to restore something which has been soft deleted, `model.restore` will do this. ### Usage with a custom initialize function This package has an initialize function that wires everthing up. If you declare a custom initialize function, you need to make sure to call the initialize function on the prototype from the custom initialize function in order for everything to work properly. var repository = require('./repo'); module.exports = repository.Model.extend({ tableName: 'users', soft: true, initialize: function() { this.on('saving', this.validate); repository.Model.prototype.initialize.apply(this, arguments); }, validate: function() { ... } });