DosssServ.js 3.55 KB
var DossModl = require('../models/DossModl');
var async = require('async');

(function init() {
    DossModl.find({
        special: 'root'
    }).exec(function (err, data) {
        if (data.length < 1) {
            DossModl.create({
                special: 'root',
                titre: 'Racine'
            });
        }
    });
    DossModl.find({
        special: 'trash'
    }).exec(function (err, data) {
        if (data.length < 1) {
            DossModl.create({
                special: 'trash',
                titre: 'Corbeille'
            });
        }
    });
})();

var DosssServ = module.exports = {

    simple: ['_id', 'titre', 'parent', 'special', 'hidden'],

    simpleData: function (dossD, cb) {
        var doss = {};
        for (var prop of DosssServ.simple) {
            doss[prop] = dossD[prop];
        }
        // TODO Dernier message
        cb(null, doss);
    },


    detailedData: function (dossD, cb) {
        async.parallel([
            function (cba) {
                var doss = {};
                for (var prop of DosssServ.simple) {
                    doss[prop] = dossD[prop];
                }
                cba(null, doss);
            },
            function (cba) {
                DosssServ.children(dossD._id, function (err, children) {
                    if (err) {
                        cba(err);
                    } else {
                        async.map(children, DosssServ.simpleData, cba);
                    }
                });
            },
            function (cba) {
                ConvsServ = require('../services/ConvsServ');
                ConvsServ.children(dossD._id, function (err, children) {
                    if (err) {
                        cba(err);
                    } else {
                        async.map(children, ConvsServ.simpleData, cba);
                    }
                });
            }
        ], function (err, res) {
            if (err) {
                cb(err);
            } else {
                doss = res[0];
                doss.dosss = res[1];
                doss.convs = res[2];
                cb(null, doss);
            }
        });
    },

    get: function (special, cb) {
        DossModl.findById(special).exec(function (err, doss) {
            if (!err && doss) {
                cb(null, doss);
            } else {
                DossModl.findOne({
                    special: special
                }).exec(function (err2, doss) {
                    if (err2) {
                        cb(err);
                    } else {
                        cb(null, doss ? doss : null);
                    }
                });
            }
        });
    },

    children: function (id, cb) {
        DossModl.find({
            parent: id,
            $or: [{
                hidden: false
            }, {
                hidden: undefined
            }]
        }, cb);
    },

    assert: function (data, cb) {
        cb(null, data.titre && data.parent);
    },

    add: function (data, cb) {
        DossModl.create({
            titre: data.titre,
            parent: data.parent
        }, cb);
    },

    remove: function (id, cb) {
        async.waterfall([function (cba) {
            DosssServ.get(id, cba);
        }, function (doss, cba) {
            cba(doss ? null : 'notfound', doss);
        }, function (doss, cba) {
            DosssServ.get('trash', function (err, trash) {
                cba(err, doss, trash);
            });
        }, function (doss, trash, cba) {
            doss.parent = trash._id;
            doss.save(cba);
        }], cb);
    }
};