diff --git a/app/models/ConvModl.js b/app/models/ConvModl.js index 630e0b3..563ba8a 100644 --- a/app/models/ConvModl.js +++ b/app/models/ConvModl.js @@ -8,7 +8,9 @@ module.exports = mongoose.model('Conv', { parent: { type: String, default: 'lost' + }, + hidden: { + type: Boolean, + default: false } - // TODO Visibilité (brouillon) - // TODO Répertoire }); diff --git a/app/models/DossModl.js b/app/models/DossModl.js index 2d3b8f2..a5d85ca 100644 --- a/app/models/DossModl.js +++ b/app/models/DossModl.js @@ -12,6 +12,9 @@ module.exports = mongoose.model('Doss', { special: { type: String, default: '' + }, + hidden: { + type: Boolean, + default: false } - // TODO Visibilité (brouillon) }); diff --git a/app/models/MembreModl.js b/app/models/MembreModl.js index c00bdfc..d8466f9 100644 --- a/app/models/MembreModl.js +++ b/app/models/MembreModl.js @@ -8,5 +8,9 @@ module.exports = mongoose.model('Membre', { role: { type: String, default: 'Membre' + }, + hidden: { + type: Boolean, + default: false } }); diff --git a/app/models/MessModl.js b/app/models/MessModl.js index d43573c..8b14630 100644 --- a/app/models/MessModl.js +++ b/app/models/MessModl.js @@ -15,5 +15,9 @@ module.exports = mongoose.model('Mess', { date: { type: Date, default: Date.now + }, + hidden: { + type: Boolean, + default: false } }); diff --git a/app/routes/ApiRtes.js b/app/routes/ApiRtes.js index 5c63db8..ee14753 100644 --- a/app/routes/ApiRtes.js +++ b/app/routes/ApiRtes.js @@ -2,12 +2,10 @@ var MembresServ = require('../services/MembresServ'); var PolyUserServ = require('../services/PolyUserServ'); var DecryptServ = require('../services/DecryptServ'); var DosssServ = require('../services/DosssServ'); -var DossModl = require('../models/DossModl'); var ConvsServ = require('../services/ConvsServ'); -var ConvModl = require('../models/ConvModl'); var MessServ = require('../services/MessServ'); -var MessModl = require('../models/MessModl'); // TODO Unfier ce bazar / supprimer Serv var fs = require('fs'); +var async = require('async'); var mongoose = require('mongoose'); var express = require('express'); var session = require('express-session'); @@ -32,16 +30,11 @@ ensureOkay = function (res, status, cb) { }; }; -giveBackNull = function (res, status) { +giveNull = function (res, status) { // TODO Statut par défaut / optionnel // status = 200; return ensureOkay(res, 404, function (data) { - res.status(status); - if (status != 204 && status != 205) { - res.json(data); - } else { - res.end(); - } + res.status(status).end(); }); }; @@ -61,12 +54,8 @@ giveBack = function (res, status) { // TODO Statut par défaut / optionnel // status = 200; return ensureExists(res, 404, function (data) { - res.status(status); - if (status != 204 && status != 205) { - res.json(data); - } else { - res.end(); - } + + res.status(status).json(data); }); }; @@ -82,12 +71,9 @@ reqAuth = function (req, res, next) { reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403) return function (req, res, next) { reqAuth(req, res, function () { - verify(req, res, function (err, data) { - cb = ensureExists(res, 403, function () { - next(); // Si on passe quoi que ce soit à next(), erreur 500 - }); - cb(err, data); - }); + verify(req, res, ensureExists(res, 403, function () { + next(); // Si on passe quoi que ce soit à next(), erreur 500 + })); }); }; }; @@ -129,19 +115,27 @@ decrypt = function () { // Sessions - sessionData = function (session, cb) { - PolyUserServ.get(session.login, function (err, nom) { - // Nom - session.nom = nom.nom; - session.section = nom.section; - MembresServ.estMembre(session.login, function (membre) { // TODO Asyc - session.membre = membre; - MembresServ.estBureau(session.login, function (bureau) { - session.bureau = bureau; - cb(session); - }); - }); + async.parallel([ + function (cba) { + PolyUserServ.get(session.login, cba); + }, + function (cba) { + MembresServ.estMembre(session.login, cba); + }, + function (cba) { + MembresServ.estBureau(session.login, cba); + } + ], function (err, res) { + if (err) { + cb(err); + } else { + session.nom = res[0].nom; + session.section = res[0].section; + session.membre = res[1]; + session.bureau = res[2]; + cb(null, session); + } }); }; @@ -168,16 +162,12 @@ api.post('/session', decrypt(), assert(function (req, res, cb) { if (verified) { sessionData({ login: req.body.login - }, function (session) { + }, ensureOkay(res, 500, function (session) { req.session.data = session; - req.session.save(function (err) { - if (err) { - res.status(500).json(err); - } else { - res.status(201).json(session); - } - }); - }); + req.session.save(ensureOkay(res, 500, function () { + res.status(201).json(session); + })); + })); } else { req.session.destroy(ensureOkay(res, 500, function () { res.status(401).end(); @@ -191,110 +181,122 @@ api.delete('/session', function (req, res) { // Se déconnecter res.status(205).end(); }); +getSubject = function (serv) { // Fonction générique pour récupérer un objet spécifié dans l'URL + return function (req, res, next) { + serv.get(req.params._id, ensureExists(res, 404, function (data) { + req.subject = data; + next(); + })); + }; +}; -// Membres -api.get('/membres', function (req, res) { // Liste des membres - MembresServ.list(giveBack(res, 200)); -}); +assertSubject = function (serv) { + return assert(function (req, res, cb) { + serv.assert(req.body, cb); + }); +}; -api.post('/membres', assert(function (req, res, cb) { - cb(null, typeof req.body.login == 'string' && req.body.login !== ''); -}), reqBureau, function (req, res) { // Ajout d'un membre - MembresServ.add(req.body, giveBack(res, 201)); -}); +addSubject = function (serv) { + return function (req, res) { -api.delete('/membres/:membre_id', reqBureau, function (req, res) { // Supression d'un membre - MembresServ.remove(req.params.membre_id, giveBack(res, 205)); -}); + serv.add(req.body, ensureExists(res, 404, function (membre) { -// Dossiers -api.get('/dosss/:doss_id', reqAuth, function (req, res) { // Un doss - // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect) - // TODO Requêtes séparées ? - // TODO Async - DosssServ.get(req.params.doss_id, ensureExists(res, 404, function (doss) { - DosssServ.children(doss._id, ensureOkay(res, 500, function (dosss) { - ConvsServ.children(doss._id, ensureOkay(res, 500, function (convs) { - doss.dosss = dosss; - doss.convs = convs; - res.json(doss); - })); + serv.simpleData(membre, giveBack(res, 201)); })); + }; +}; + +delSubject = function (serv) { + return function (req, res) { + serv.remove(req.subject, giveNull(res, 205)); + }; +}; + +// Membres + +// Liste des membres +api.get('/membres', function (req, res) { + MembresServ.list(ensureExists(res, 404, function (membres) { + async.map(membres, MembresServ.simpleData, function (err, data) { + giveBack(res, 200)(err, data); + }); })); }); -api.post('/dosss', reqMembre, function (req, res) { // Ajout d'un doss - // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect) - DosssServ.getId(req.body.parent, function (parent) { // TODO Async - req.body.parent = parent; - DosssServ.add(req.body, giveBackNull(res, 201)); - }); -}); +// Ajout d'un membre +api.post('/membres', reqBureau, assertSubject(MembresServ), function (req, res) { -api.delete('/dosss/:doss_id', reqBureau, function (req, res) { // Supression d'un doss - DosssServ.remove(req.params.doss_id, giveBackNull(res, 205)); + MembresServ.add(req.body, ensureExists(res, 404, function (membre) { + + MembresServ.simpleData(membre, giveBack(res, 201)); + })); }); -// Conversations +// Supression d'un membre +api.delete('/membres/:_id', reqBureau, getSubject(MembresServ), delSubject(MembresServ)); -getSubject = function (modl) { - // TODO Gérer les dossiers - return function (req, res, next) { - modl.findById(req.params._id, ensureExists(res, 404, function (data) { - req.subject = data; - next(); - })); - }; -}; -getConv = function (req, res, next) { - ConvModl.findById(req.params.conv_id, ensureExists(res, 404, function (data) { - req.conv = conv; +// Dossiers + +parentId = function (req, res, next) { + DosssServ.get(req.body.parent, ensureExists(res, 404, function (parent) { + req.body.parent = parent._id; next(); })); }; -api.get('/convs/:_id', reqAuth, getSubject(ConvModl), function (req, res) { // Une conv - res.json(req.subject); +// Un doss +api.get('/dosss/:_id', reqAuth, getSubject(DosssServ), function (req, res) { + DosssServ.detailedData(req.subject, giveBack(res, 200)); }); -// Ajout d'un conv -api.post('/convs', reqMembre, function (req, res) { - // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect) - DosssServ.getId(req.body.parent, function (parent) { // TODO Async - req.body.parent = parent; - ConvsServ.add(req.body, giveBack(res, 201)); - }); -}); +// Ajout d'un doss +api.post('/dosss', reqMembre, parentId, assertSubject(DosssServ), addSubject(DosssServ)); -// Supression d'un conv -api.delete('/convs/:_id', reqBureau, getSubject(ConvModl), function (req, res) { - req.subject.remove(giveBack(res, 205)); +// Supression d'un doss +api.delete('/dosss/:_id', reqBureau, getSubject(DosssServ), delSubject(DosssServ)); + +// Conversations + +// Infos sur une conversation +api.get('/convs/:_id', reqAuth, getSubject(ConvsServ), function (req, res) { + ConvsServ.detailedData(req.subject, giveBack(res, 200)); }); +// Ajout d'une conversation +api.post('/convs', reqMembre, parentId, assertSubject(ConvsServ), addSubject(ConvsServ)); + +// Supression d'une conversation +api.delete('/convs/:_id', reqBureau, getSubject(ConvsServ), delSubject(ConvsServ)); + +addLogin = function (req, res, next) { + req.body.login = req.session.data.login; + next(); +}; + // Messages -api.get('/messs/:conv_id', reqAuth, function (req, res) { // Liste des messs - MessServ.list(req.params.conv_id, giveBackNull(res, 200)); -}); +// Liste des messs +// api.get('/messs/:conv_id', reqAuth, function (req, res) { +// MessServ.list(req.params.conv_id, ensureExists(res, 404, function (messs) { +// async.map(messs, MessServ.simpleData, giveBack(res, 200)); +// })); +// }); -api.post('/messs', reqMembre, function (req, res) { // Ajout d'un mess - data = req.body; - data.login = req.session.data.login; - MessServ.add(data, giveBack(res, 201)); -}); +// Ajout d'un mess +api.post('/messs', reqMembre, addLogin, assertSubject(MessServ), addSubject(MessServ)); // Édition d'un mess -api.put('/messs/:_id', reqMembre, getSubject(MessModl), reqOwn('mess'), function (req, res) { - req.subject.content = req.body.content; - // TODO Edit date - req.subject.save(giveBack(res, 201)); -}); +api.put('/messs/:_id', reqMembre, addLogin, assertSubject(MessServ), getSubject(MessServ), reqOwn('mess'), + function (req, res) { + + MessServ.edit(req.subject, req.body, ensureExists(res, 404, function (mess) { + MessServ.simpleData(mess, giveBack(res, 201)); + })); + }); // Supression d'un mess -api.delete('/messs/:_id', reqMembre, getSubject(MessModl), reqOwn('mess'), function (req, res) { - req.subject.remove(giveBack(res, 205)); -}); +api.delete('/messs/:_id', reqMembre, getSubject(MessServ), reqOwn('mess'), delSubject(MessServ)); api.all('/coffee', function (req, res) { res.status(418).end(); diff --git a/app/services/ConvsServ.js b/app/services/ConvsServ.js index f4f32ee..ab240f8 100644 --- a/app/services/ConvsServ.js +++ b/app/services/ConvsServ.js @@ -1,73 +1,87 @@ var ConvModl = require('../models/ConvModl'); -// var PolyUserServ = require('../services/PolyUserServ'); +var MessServ = require('../services/MessServ'); var async = require('async'); var ConvsServ = {}; -ConvsServ.addData = function (conv, cb) { - // PolyUserServ.get(Conv.login, function (err, nom) { - // if (nom) { - // Conv.nom = nom; - // } else { - // Conv.nom = Conv.login; - // } - // cb(null, Conv); - // }); +ConvsServ.simple = ['_id', 'titre', 'parent', 'hidden']; + +ConvsServ.simpleData = function (convD, cb) { // TODO Démarré par // TODO Dernier message + var conv = {}; + for (var prop of ConvsServ.simple) { + conv[prop] = convD[prop]; + } cb(null, conv); }; -ConvsServ.exists = function (id, cb) { - ConvModl.findById(id).exec(function (err, conv) { - if (err) +ConvsServ.detailedData = function (convD, cb) { + async.parallel([ + function (cba) { + var conv = {}; + for (var prop of ConvsServ.simple) { + conv[prop] = convD[prop]; + } + cba(null, conv); + }, + function (cba) { + MessServ.children(convD._id, function (err, children) { + + if (err) { + cba(err); + } else { + async.map(children, MessServ.simpleData, cba); + } + }); + } + ], function (err, res) { + if (err) { cb(err); - else - cb(null, true); + } else { + conv = res[0]; + conv.messs = res[1]; + + cb(null, conv); + } }); }; ConvsServ.get = function (id, cb) { - ConvModl.findById(id).lean().exec(function (err, conv) { - if (err) - cb(err); - else - ConvsServ.addData(conv, cb); - }); + ConvModl.findById(id, cb); }; -ConvsServ.list = function (cb) { // TODO Visibilité - ConvModl.find({}).lean().exec(function (err, Convs) { - async.mapSeries(Convs, ConvsServ.addData, cb); - }); +ConvsServ.children = function (id, cb) { // Conversations filles du dossier en paramètre + ConvModl.find({ + parent: id, + $or: [{ + hidden: false + }, { + hidden: undefined + }] + }, cb); }; -ConvsServ.children = function (id, cb) { - ConvModl.find({ - parent: id - }).lean().exec(function (err, Conv) { - async.mapSeries(Conv, ConvsServ.addData, cb); - }); +ConvsServ.assert = function (conv, cb) { + cb(null, conv.titre, conv.parent); }; ConvsServ.add = function (data, cb) { ConvModl.create({ titre: data.titre, parent: data.parent - }, function (err, Conv) { - ConvsServ.get(Conv._id, cb); - }); -}; - -ConvsServ.canWriteIn = function (id, login, cb) { - ConvsServ.exists(id, cb); + }, cb); }; ConvsServ.remove = function (id, cb) { - // TODO Trash - ConvModl.remove({ - _id: id - }, cb); + async.waterfall([function (cba) { + ConvsServ.get(id, cba); + }, function (conv, cba) { + cba(conv ? null : 'notfound', conv); + }, function (conv, cba) { + conv.parent = 'trash'; + conv.save(cba); + }], cb); }; module.exports = ConvsServ; diff --git a/app/services/DosssServ.js b/app/services/DosssServ.js index eb13b17..03f9728 100644 --- a/app/services/DosssServ.js +++ b/app/services/DosssServ.js @@ -1,5 +1,5 @@ var DossModl = require('../models/DossModl'); -// var PolyUserServ = require('../services/PolyUserServ'); +var ConvsServ = require('../services/ConvsServ'); var async = require('async'); var DosssServ = {}; @@ -15,97 +15,119 @@ var DosssServ = {}; }); } }); + DossModl.find({ + special: 'trash' + }).exec(function (err, data) { + if (data.length < 1) { + DossModl.create({ + special: 'trash', + titre: 'Corbeille' + }); + } + }); })(); -DosssServ.addData = function (doss, cb) { - // PolyUserServ.get(Doss.login, function (err, nom) { - // if (nom) { - // Doss.nom = nom; - // } else { - // Doss.nom = Doss.login; - // } - // cb(null, Doss); - // }); +DosssServ.simple = ['_id', 'titre', 'parent', 'special', 'hidden']; + +DosssServ.simpleData = function (dossD, cb) { + var doss = {}; + for (var prop of DosssServ.simple) { + doss[prop] = dossD[prop]; + } // TODO Dernier message cb(null, doss); }; -DosssServ.exists = function (id, cb) { - DossModl.findById(id).exec(function (err, doss) { - if (err) + +DosssServ.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.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 - cb(null, true); + } else { + doss = res[0]; + doss.dosss = res[1]; + doss.convs = res[2]; + cb(null, doss); + } }); }; -DosssServ.getId = function (special, cb) { +DosssServ.get = function (special, cb) { + console.log(special); DossModl.findById(special).exec(function (err, doss) { if (!err && doss) { - cb(doss._id); // Équivalent à cb(special) + cb(null, doss); } else { - DossModl.findOne({ special: special }).exec(function (err2, doss) { - if (!err2 && doss) { - cb(doss._id); + if (err2) { + cb(err); } else { - cb(null); + cb(null, doss ? doss : null); } }); } }); }; -DosssServ.get = function (special, cb) { - DosssServ.getId(special, function (id) { // TODO À enlever avec api.get('/dosss/:doss_id') - DossModl.findById(id).lean().exec(function (err, doss) { - if (err) { - cb(err); - } else { - DosssServ.addData(doss, cb); - } - }); - }); -}; - -DosssServ.list = function (cb) { - DossModl.find({}).lean().exec(function (err, Dosss) { - async.mapSeries(Dosss, DosssServ.addData, cb); - }); -}; - DosssServ.children = function (id, cb) { DossModl.find({ - parent: id - }).lean().exec(function (err, Dosss) { - async.mapSeries(Dosss, DosssServ.addData, cb); - }); + parent: id, + $or: [{ + hidden: false + }, { + hidden: undefined + }] + }, cb); +}; + +DosssServ.assert = function (data, cb) { + cb(data.titre && data.parent); }; DosssServ.add = function (data, cb) { DossModl.create({ titre: data.titre, parent: data.parent - }, function (err, Doss) { - if (err) { - cb(err); - } else { - DosssServ.get(Doss._id, cb); - } - }); -}; - -DosssServ.canWriteIn = function (id, login, cb) { - DosssServ.exists(id, cb); + }, cb); }; DosssServ.remove = function (id, cb) { - // TODO Trash - DossModl.remove({ - _id: id - }, cb); + async.waterfall([function (cba) { + DosssServ.get(id, cba); + }, function (doss, cba) { + cba(doss ? null : 'notfound', doss); + }, function (doss, cba) { + doss.parent = 'trash'; + doss.save(cba); + }], cb); }; module.exports = DosssServ; diff --git a/app/services/MembresServ.js b/app/services/MembresServ.js index d2225f6..af66b90 100644 --- a/app/services/MembresServ.js +++ b/app/services/MembresServ.js @@ -4,40 +4,73 @@ var async = require('async'); var MembresServ = {}; -MembresServ.addData = function (membre, cb) { - PolyUserServ.get(membre.login, function (err, nom) { - membre.nom = nom.nom; - membre.section = nom.section; - MembresServ.estBureau(membre.login, function (bureau) { - membre.bureau = bureau; - cb(err, membre); - }); +MembresServ.public = ['_id', 'login', 'role']; + +MembresServ.simpleData = function (membreD, cb) { + async.parallel([ + function (cba) { + var membre = {}; + for (var prop of MembresServ.public) { + membre[prop] = membreD[prop]; + } + + cba(null, membre); + }, + function (cba) { + PolyUserServ.get(membreD.login, cba); + }, + function (cba) { + MembresServ.estMembre(membreD.login, cba); + }, + function (cba) { + MembresServ.estBureau(membreD.login, cba); + } + ], function (err, res) { + if (err) { + cb(err); + } else { + membre = res[0]; + + membre.nom = res[1].nom; + membre.section = res[1].section; + membre.membre = res[2]; + membre.bureau = res[3]; + cb(null, membre); + } }); }; MembresServ.get = function (id, cb) { - MembreModl.findById(id).lean().exec(function (err, membre) { - if (err) - cb(err); - else - MembresServ.addData(membre, cb); - }); + MembreModl.findById(id, cb); +}; + +MembresServ.getLogin = function (login, cb) { + MembreModl.findOne({ + login: login + }, cb); }; MembresServ.list = function (cb) { - MembreModl.find({}).lean().exec(function (err, membres) { - async.mapSeries(membres, MembresServ.addData, cb); - }); + MembreModl.find({ + $or: [{ + hidden: false + }, { + hidden: undefined + }] + }, cb); +}; + +MembresServ.assert = function (membre, cb) { + + cb(null, membre.login && membre.role); }; MembresServ.add = function (data, cb) { + MembreModl.create({ login: data.login, - role: data.role, - section: data.section, - }, function (err, membre) { - MembresServ.get(membre._id, cb); - }); + role: data.role + }, cb); }; MembresServ.remove = function (id, cb) { @@ -51,9 +84,9 @@ MembresServ.estMembre = function (login, cb) { login: login }, function (err, data) { if (!err && data) { - cb(true); + cb(null, true); } else { - cb(false); + cb(null, false); } }); }; @@ -63,9 +96,9 @@ MembresServ.estBureau = function (login, cb) { login: login }, function (err, data) { if (!err && data && ['Président', 'Vice-président', 'Trésorier', 'Secrétaire'].indexOf(data.role) > -1) { - cb(true); + cb(null, true); } else { - cb(false); + cb(null, false); } }); }; diff --git a/app/services/MessServ.js b/app/services/MessServ.js index 94ba3a0..0a21968 100644 --- a/app/services/MessServ.js +++ b/app/services/MessServ.js @@ -1,82 +1,85 @@ var MessModl = require('../models/MessModl'); -// var PolyUserServ = require('../services/PolyUserServ'); -var ConvsServ = require('../services/ConvsServ'); +var MembresServ = require('../services/MembresServ'); var async = require('async'); var MesssServ = {}; -MesssServ.addData = function (mess, cb) { - mess.auteur = {}; - mess.auteur.nom = mess.login; - // PolyUserServ.get(Mess.login, function (err, nom) { - // if (nom) { - // Mess.nom = nom; - // } else { - // Mess.nom = Mess.login; - // } - // cb(null, Mess); - // }); - cb(null, mess); -}; +MesssServ.simple = ['_id', 'login', 'content', 'conv', 'date', 'hidden']; -MesssServ.get = function (id, cb) { - MessModl.findById(id).lean().exec(function (err, mess) { - if (err) +MesssServ.simpleData = function (messD, cb) { + + async.parallel([ + function (cba) { + var mess = {}; + for (var prop of MesssServ.simple) { + mess[prop] = messD[prop]; + } + cba(null, mess); + }, + function (cba) { + async.waterfall([ + function (cbaa) { + + MembresServ.getLogin(messD.login, cbaa); + }, + function (membre, cbaa) { + MembresServ.simpleData(membre, cbaa); + } + ], cba); + } + ], function (err, res) { + if (err) { cb(err); - else - MesssServ.addData(mess, cb); + } else { + mess = res[0]; + mess.auteur = res[1]; + cb(null, mess); + } }); }; -MesssServ.list = function (conv, cb) { +MesssServ.get = function (id, cb) { + MessModl.findById(id, cb); +}; + +MesssServ.children = function (conv, cb) { MessModl.find({ - conv: conv - }).lean().exec(function (err, Messs) { - async.mapSeries(Messs, MesssServ.addData, cb); - }); + conv: conv, + $or: [{ + hidden: false + }, { + hidden: undefined + }] + }, cb); +}; + +MesssServ.assert = function (mess, cb) { + cb(null, mess.login && mess.content && mess.conv); }; MesssServ.add = function (data, cb) { - ConvsServ.canWriteIn(data.conv, data.login, function (err, canWriteIn) { - if (err) - cb(err); - else { - if (canWriteIn) { - MessModl.create({ - content: data.content, - login: data.login, - conv: data.conv - }, function (err, Mess) { - MesssServ.get(Mess._id, cb); - }); - } else { - cb('unauthorized'); - } - } - }); + MessModl.create({ + content: data.content, + login: data.login, + conv: data.conv + }, cb); }; -MesssServ.edit = function (data, cb) { - MessModl.findById(data._id, function (err, mess) { - if (err) { - cb(err); - } else { - if (mess) { - mess.content = data.content; - // TODO Edit date - mess.save(cb); - } else { - cb('notfound'); - } - } - }); +MesssServ.edit = function (mess, data, cb) { + mess.content = data.content; + // TODO Edit date + mess.save(cb); }; MesssServ.remove = function (id, cb) { - // TODO Trash - MessModl.remove({ - _id: id - }, cb); + async.waterfall([function (cba) { + MesssServ.get(id, cba); + }, function (mess, cba) { + cba(mess ? null : 'notfound', mess); + }, function (mess, cba) { + mess.hidden = true; + mess.save(cba); + }], cb); }; module.exports = MesssServ; diff --git a/public/js/controllers/ForumConvCtrl.js b/public/js/controllers/ForumConvCtrl.js index 6318d15..e2d345c 100644 --- a/public/js/controllers/ForumConvCtrl.js +++ b/public/js/controllers/ForumConvCtrl.js @@ -1,6 +1,5 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct']) .controller('ForumConvCtrl', function ($scope, $routeParams, SessionServ, ApiServ) { - $scope.messs = []; $scope.conv = {}; $scope.formData = {}; @@ -11,11 +10,6 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct']) ApiServ("récupération de la conversation", 'get', ['convs', $routeParams.conv_id], null, function (err, conv) { if (!err) { $scope.conv = conv; - ApiServ("récupération des messages", 'get', ['messs', conv._id], null, function (err, messs) { - if (!err) { - $scope.messs = messs; - } - }); } }); @@ -27,23 +21,24 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct']) ApiServ("envoi du message", 'post', 'messs', data, function (err, mess) { if (!err) { $scope.formData = {}; - $scope.messs.push(mess); + $scope.conv.messs.push(mess); } }); }; $scope.delMess = function (index) { - ApiServ("suppression du message", 'delete', ['messs', $scope.messs[index]._id], null, function (err) { + ApiServ("suppression du message", 'delete', ['messs', $scope.conv.messs[index]._id], null, function (err) { if (!err) - $scope.messs.splice(index, 1); + $scope.conv.messs.splice(index, 1); }); }; $scope.editButton = function (index) { - mess = $scope.messs[index]; + mess = $scope.conv.messs[index]; if (mess.editMode) { ApiServ("édition du message", 'put', ['messs', mess._id], { - content: mess.content + content: mess.content, + conv: $scope.conv._id }, function (err, data) { if (!err) { mess.content = data.content; diff --git a/public/views/forumConv.html b/public/views/forumConv.html index 05e01fa..ac31d1d 100644 --- a/public/views/forumConv.html +++ b/public/views/forumConv.html @@ -14,17 +14,15 @@ - - + + {{ mess.auteur.image }} -
- {{ mess.auteur.login }} - {{ mess.auteur.nom }} -
{{ mess.auteur.section }} + {{ mess.auteur.login }} +
{{ mess.auteur.role }} +
{{ doss.date }} - -- libgit2 0.21.2