mongoose-smart-delete
Version:
A Mongoose plugin for implementing soft delete functionality, allowing documents to be marked as deleted without being removed from the database.
37 lines (26 loc) • 1.21 kB
JavaScript
require('./injectMethods')
const injectSchema = require('./injectSchema')
const injectMiddleware = require('./injectMiddleware')
module.exports = function (schema, options = {}) {
const config = {}
config.deleted = {}
config.deleted.field = typeof options.deleted?.field === 'string' ? options.deleted?.field : 'deleted'
if (options.deletedAt) {
config.deletedAt = {}
config.deletedAt.field = typeof options.deletedAt.field === 'string' ? options.deletedAt.field : 'deletedAt'
}
if (options.deletedBy) {
if (typeof options.deletedBy.ref !== 'string') throw new Error('deletedBy.ref is required')
config.deletedBy = {}
config.deletedBy.field = typeof options.deletedBy.field === 'string' ? options.deletedBy.field : 'deletedBy'
config.deletedBy.ref = options.deletedBy.ref
}
if (options.deletionId) {
config.deletionId = {}
config.deletionId.field = typeof options.deletionId.field === 'string' ? options.deletionId.field : 'deletionId'
}
config.mode = ['strict', '$ne'].indexOf(options.mode) > -1 ? options.mode : '$ne'
schema._smartDelete = true
injectSchema(schema, config)
injectMiddleware(schema, config)
}