Soft delete in Sails/Waterline

纵然是瞬间 提交于 2019-12-12 11:16:48

问题


Trying to delete a user model using:

//Hard Delete    
User.destroy({id:userId}, function(err, res){  
  //Hard Delete
})  

I need to do a soft delete on User model and currently setting a flag isDeleted to true on delete and updating document:

updateUser.isDeleted = true;
User.update({id:userId}, updateUser, function(err, res){
  Update project
})

and while fetching documents I am doing a check If isDeleted - true or not.
Is there any In-built feature provided by Sails or Waterline which I can configure to perform a soft delete and avoid updating and then fetching based on isDeleted flag?


回答1:


you can use beforeFind() life cycle function for filter of soft deleted records

model: parrot,js

module.exports = {
    attributes: {
        // e.g., "Polly"
        name: {
            type: 'string'
        },

        // e.g., 3.26
        wingspan: {
            type: 'float',
            required: true
        },

        // e.g., "cm"
        wingspanUnits: {
            type: 'string',
            enum: ['cm', 'in', 'm', 'mm'],
            defaultsTo: 'cm'
        },

        // e.g., [{...}, {...}, ...]
        knownDialects: {
          collection: 'Dialect'
        },

        isDeleted:{
            type:'boolean'
        }
    },

    beforeFind: function(values, cb) {
        values.isDeleted = false;
        cb();
    }
}

ParrotController.js

module.exports = {

    // getting default parrots isDeleted = true
    list: function (req, res) {

        Parrot
        .find()
        .exec(function(err, parrots) {
            if(err) return res.send({ flag:false, data:[], message:"Error." });

            if(parrots && parrots.length){
                return res.send({ flag:true, data:parrots, message:"Success." });
            }
            else{
                return res.send({ flag:false, data:[], message:"Parrot list is empty." });
            }

        });

    }
};



回答2:


There is no soft-delete feature built into sails, and I doubt there will be.

Here's a challenge: why not write your own? Waterline supports class methods! Of course you would have to do it for each model or create a service... which might be even more effective.



来源:https://stackoverflow.com/questions/27243034/soft-delete-in-sails-waterline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!