Commit d51337d0afb9e1157c7fd4662b43dd65ef09d643

Authored by Geoffrey PREUD'HOMME
1 parent a470afda

Améliorations diverses API

* Simplifié le code route
* Possibilité de mixer arguments url et post data
app/routes/ApiRtes.js
@@ -18,30 +18,75 @@ var api = express(); @@ -18,30 +18,75 @@ var api = express();
18 // Connection à la BDD 18 // Connection à la BDD
19 mongoose.connect(require('../../config/db').url); 19 mongoose.connect(require('../../config/db').url);
20 20
21 -// Authentication  
22 -reqAuth = function () {  
23 - return function (req, res, next) {  
24 - if (req.session.data && req.session.data.login) {  
25 - next(); 21 +// Fonctions diverses
  22 +ensureOkay = function (res, status, cb) {
  23 + // TODO Statut par défaut / optionnel
  24 + // status = 500;
  25 + return function (err, data) {
  26 + // TODO Différencier data non-présent / faux
  27 + if (err) {
  28 + res.status(status).json(err);
26 } else { 29 } else {
27 - res.status(401).end(); 30 + cb(data);
28 } 31 }
29 }; 32 };
30 }; 33 };
31 34
  35 +giveBackNull = function (res, status) {
  36 + // TODO Statut par défaut / optionnel
  37 + // status = 200;
  38 + return ensureOkay(res, 404, function (data) {
  39 + res.status(status);
  40 + if (status != 204 && status != 205) {
  41 + res.json(data);
  42 + } else {
  43 + res.end();
  44 + }
  45 + });
  46 +};
  47 +
  48 +ensureExists = function (res, status, cb) {
  49 + // TODO Statut par défaut / optionnel
  50 + // status = 404;
  51 + return ensureOkay(res, 500, function (data) {
  52 + if (data) {
  53 + cb(data);
  54 + } else {
  55 + res.status(status).end();
  56 + }
  57 + });
  58 +};
  59 +
  60 +giveBack = function (res, status) {
  61 + // TODO Statut par défaut / optionnel
  62 + // status = 200;
  63 + return ensureExists(res, 404, function (data) {
  64 + res.status(status);
  65 + if (status != 204 && status != 205) {
  66 + res.json(data);
  67 + } else {
  68 + res.end();
  69 + }
  70 + });
  71 +};
  72 +
  73 +// Authentication
  74 +reqAuth = function (req, res, next) {
  75 + if (req.session.data && req.session.data.login) {
  76 + next();
  77 + } else {
  78 + res.status(401).end();
  79 + }
  80 +};
  81 +
32 reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403) 82 reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403)
33 return function (req, res, next) { 83 return function (req, res, next) {
34 - reqAuth()(req, res, function () {  
35 - verify(req, res, function (err, verified) {  
36 - if (err) {  
37 - res.status(500).send(err);  
38 - } else {  
39 - if (verified) {  
40 - next();  
41 - } else {  
42 - res.status(403).end();  
43 - }  
44 - } 84 + reqAuth(req, res, function () {
  85 + verify(req, res, function (err, data) {
  86 + cb = ensureExists(res, 403, function () {
  87 + next(); // Si on passe quoi que ce soit à next(), erreur 500
  88 + });
  89 + cb(err, data);
45 }); 90 });
46 }); 91 });
47 }; 92 };
@@ -53,31 +98,19 @@ reqOwn = function (objName) { @@ -53,31 +98,19 @@ reqOwn = function (objName) {
53 }); 98 });
54 }; 99 };
55 100
56 -reqMembre = function () {  
57 - return reqVerified(function (req, res, cb) {  
58 - cb(null, req.session.data.membre);  
59 - });  
60 -}; 101 +reqMembre = reqVerified(function (req, res, cb) {
  102 + cb(null, req.session.data.membre);
  103 +});
61 104
62 -reqBureau = function () {  
63 - return reqVerified(function (req, res, cb) {  
64 - cb(null, req.session.data.bureau);  
65 - });  
66 -}; 105 +reqBureau = reqVerified(function (req, res, cb) {
  106 + cb(null, req.session.data.bureau);
  107 +});
67 108
68 assert = function (test) { 109 assert = function (test) {
69 return function (req, res, next) { 110 return function (req, res, next) {
70 - test(req, res, function (err, verified) {  
71 - if (err) {  
72 - res.status(500).send(err);  
73 - } else {  
74 - if (verified) {  
75 - next();  
76 - } else {  
77 - res.status(400).end();  
78 - }  
79 - }  
80 - }); 111 + test(req, res, ensureExists(res, 400, function () {
  112 + next();
  113 + }));
81 }; 114 };
82 }; 115 };
83 116
@@ -94,6 +127,7 @@ decrypt = function () { @@ -94,6 +127,7 @@ decrypt = function () {
94 }; 127 };
95 }; 128 };
96 129
  130 +
97 // Sessions 131 // Sessions
98 132
99 sessionData = function (session, cb) { 133 sessionData = function (session, cb) {
@@ -130,241 +164,136 @@ api.get('/session', function (req, res) { // Informations sur la session @@ -130,241 +164,136 @@ api.get('/session', function (req, res) { // Informations sur la session
130 api.post('/session', decrypt(), assert(function (req, res, cb) { 164 api.post('/session', decrypt(), assert(function (req, res, cb) {
131 cb(null, req.body && typeof req.body.login == 'string' && req.body.login !== '' && typeof req.body.pass == 'string' && req.body.pass !== ''); 165 cb(null, req.body && typeof req.body.login == 'string' && req.body.login !== '' && typeof req.body.pass == 'string' && req.body.pass !== '');
132 }), function (req, res) { // Se connecter 166 }), function (req, res) { // Se connecter
133 - PolyUserServ.verify(req.body.login, req.body.pass, function (err, verified) {  
134 - if (err) {  
135 - res.status(500).send(err);  
136 - } else {  
137 - if (verified) {  
138 - sessionData({  
139 - login: req.body.login  
140 - }, function (session) {  
141 - req.session.data = session;  
142 - req.session.save(function (err) {  
143 - if (err) {  
144 - res.status(500).end(err);  
145 - } else {  
146 - res.status(201).send(session);  
147 - }  
148 - });  
149 - });  
150 - } else {  
151 - req.session.destroy(function (err) { 167 + PolyUserServ.verify(req.body.login, req.body.pass, ensureOkay(res, 500, function (verified) {
  168 + if (verified) {
  169 + sessionData({
  170 + login: req.body.login
  171 + }, function (session) {
  172 + req.session.data = session;
  173 + req.session.save(function (err) {
152 if (err) { 174 if (err) {
153 - res.status(500).end(err); 175 + res.status(500).json(err);
154 } else { 176 } else {
155 - res.status(401).end(); 177 + res.status(201).json(session);
156 } 178 }
157 }); 179 });
158 - } 180 + });
  181 + } else {
  182 + req.session.destroy(ensureOkay(res, 500, function () {
  183 + res.status(401).end();
  184 + }));
159 } 185 }
160 - }); 186 + }));
161 }); 187 });
162 188
163 api.delete('/session', function (req, res) { // Se déconnecter 189 api.delete('/session', function (req, res) { // Se déconnecter
164 req.session.destroy(); 190 req.session.destroy();
165 - res.status(200).end(); 191 + res.status(205).end();
166 }); 192 });
167 193
168 194
169 // Membres 195 // Membres
170 api.get('/membres', function (req, res) { // Liste des membres 196 api.get('/membres', function (req, res) { // Liste des membres
171 - MembresServ.list(function (err, membres) {  
172 - if (err)  
173 - res.status(500).send(err);  
174 - else  
175 - res.json(membres);  
176 - }); 197 + MembresServ.list(giveBack(res, 200));
177 }); 198 });
178 199
179 api.post('/membres', assert(function (req, res, cb) { 200 api.post('/membres', assert(function (req, res, cb) {
180 cb(null, typeof req.body.login == 'string' && req.body.login !== ''); 201 cb(null, typeof req.body.login == 'string' && req.body.login !== '');
181 -}), reqBureau(), function (req, res) { // Ajout d'un membre  
182 - MembresServ.add(req.body, function (err, membre) {  
183 - if (err)  
184 - res.status(500).send(err);  
185 - else  
186 - res.json(membre);  
187 - }); 202 +}), reqBureau, function (req, res) { // Ajout d'un membre
  203 + MembresServ.add(req.body, giveBack(res, 201));
188 }); 204 });
189 205
190 -api.delete('/membres/:membre_id', reqBureau(), function (req, res) { // Supression d'un membre  
191 - MembresServ.remove(req.params.membre_id, function (err, membre) {  
192 - if (err)  
193 - res.status(500).send(err);  
194 - else  
195 - res.json(null);  
196 - }); 206 +api.delete('/membres/:membre_id', reqBureau, function (req, res) { // Supression d'un membre
  207 + MembresServ.remove(req.params.membre_id, giveBack(res, 205));
197 }); 208 });
198 209
199 // Dossiers 210 // Dossiers
200 -api.get('/dosss/:doss_id', reqAuth(), function (req, res) { // Un doss 211 +api.get('/dosss/:doss_id', reqAuth, function (req, res) { // Un doss
201 // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect) 212 // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
202 // TODO Requêtes séparées ? 213 // TODO Requêtes séparées ?
203 - DosssServ.get(req.params.doss_id, function (err, doss) { // TODO Async  
204 - if (err) {  
205 - res.status(500).send(err);  
206 - } else if (!doss) {  
207 - res.status(404).end();  
208 - } else {  
209 - DosssServ.children(doss._id, function (err, dosss) {  
210 - if (err) {  
211 - res.status(500).send(err);  
212 - } else {  
213 - doss.dosss = dosss;  
214 - ConvsServ.children(doss._id, function (err, convs) {  
215 - if (err) {  
216 - res.status(500).send(err);  
217 - } else {  
218 - doss.convs = convs;  
219 - res.json(doss);  
220 - }  
221 - });  
222 - }  
223 - });  
224 - }  
225 - }); 214 + // TODO Async
  215 + DosssServ.get(req.params.doss_id, ensureExists(res, 404, function (doss) {
  216 + DosssServ.children(doss._id, ensureOkay(res, 500, function (dosss) {
  217 + ConvsServ.children(doss._id, ensureOkay(res, 500, function (convs) {
  218 + doss.dosss = dosss;
  219 + doss.convs = convs;
  220 + res.json(doss);
  221 + }));
  222 + }));
  223 + }));
226 }); 224 });
227 225
228 -api.post('/dosss', reqMembre(), function (req, res) { // Ajout d'un doss 226 +api.post('/dosss', reqMembre, function (req, res) { // Ajout d'un doss
229 // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect) 227 // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
230 DosssServ.getId(req.body.parent, function (parent) { // TODO Async 228 DosssServ.getId(req.body.parent, function (parent) { // TODO Async
231 req.body.parent = parent; 229 req.body.parent = parent;
232 - DosssServ.add(req.body, function (err, doss) {  
233 - if (err)  
234 - res.status(500).send(err);  
235 - else  
236 - res.json(doss);  
237 - }); 230 + DosssServ.add(req.body, giveBackNull(res, 201));
238 }); 231 });
239 }); 232 });
240 233
241 -api.delete('/dosss/:doss_id', reqBureau(), function (req, res) { // Supression d'un doss  
242 - DosssServ.remove(req.params.doss_id, function (err, doss) {  
243 - if (err)  
244 - res.status(500).send(err);  
245 - else  
246 - res.json(null);  
247 - }); 234 +api.delete('/dosss/:doss_id', reqBureau, function (req, res) { // Supression d'un doss
  235 + DosssServ.remove(req.params.doss_id, giveBackNull(res, 205));
248 }); 236 });
249 237
250 // Conversations 238 // Conversations
251 239
  240 +getSubject = function (modl) {
  241 + // TODO Gérer les dossiers
  242 + return function (req, res, next) {
  243 + modl.findById(req.params._id, ensureExists(res, 404, function (data) {
  244 + req.subject = data;
  245 + next();
  246 + }));
  247 + };
  248 +};
  249 +
252 getConv = function (req, res, next) { 250 getConv = function (req, res, next) {
253 - ConvModl.findById(req.params.conv_id, function (err, conv) {  
254 - if (err) {  
255 - res.status(500).json(err);  
256 - } else {  
257 - if (conv) {  
258 - req.conv = conv;  
259 - next();  
260 - } else {  
261 - res.status(404).end();  
262 - }  
263 - }  
264 - }); 251 + ConvModl.findById(req.params.conv_id, ensureExists(res, 404, function (data) {
  252 + req.conv = conv;
  253 + next();
  254 + }));
265 }; 255 };
266 256
267 -api.get('/convs/:conv_id', reqAuth(), getConv, function (req, res) { // Une conv  
268 - res.json(req.conv); 257 +api.get('/convs/:_id', reqAuth, getSubject(ConvModl), function (req, res) { // Une conv
  258 + res.json(req.subject);
269 }); 259 });
270 260
271 -api.post('/convs', reqMembre(), function (req, res) { // Ajout d'un conv 261 +// Ajout d'un conv
  262 +api.post('/convs', reqMembre, function (req, res) {
272 // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect) 263 // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
273 DosssServ.getId(req.body.parent, function (parent) { // TODO Async 264 DosssServ.getId(req.body.parent, function (parent) { // TODO Async
274 req.body.parent = parent; 265 req.body.parent = parent;
275 - ConvsServ.add(req.body, function (err, conv) {  
276 - if (err)  
277 - res.status(500).send(err);  
278 - else  
279 - res.json(conv);  
280 - }); 266 + ConvsServ.add(req.body, giveBack(res, 201));
281 }); 267 });
282 }); 268 });
283 269
284 -api.delete('/convs/:conv_id', reqBureau(), getConv, function (req, res) { // Supression d'un conv  
285 - req.conv.remove(function (err) {  
286 - if (err) // TODO Fonction propre  
287 - res.status(500).send(err);  
288 - else  
289 - res.status(205).end();  
290 - }); 270 +// Supression d'un conv
  271 +api.delete('/convs/:_id', reqBureau, getSubject(ConvModl), function (req, res) {
  272 + req.subject.remove(giveBack(res, 205));
291 }); 273 });
292 274
293 // Messages 275 // Messages
294 -api.get('/messs/:conv_id', reqAuth(), function (req, res) { // Liste des messs  
295 - MessServ.list(req.params.conv_id, function (err, messs) {  
296 - if (err)  
297 - res.status(500).send(err);  
298 - else  
299 - res.json(messs);  
300 - });  
301 -});  
302 276
303 -// api.get('/messs/:mess_id', reqAuth(), function (req, res) { // Une mess  
304 -// MessServ.get(req.params.mess_id, function (err, mess) {  
305 -// if (err)  
306 -// res.status(500).send(err);  
307 -// else  
308 -// res.json(mess);  
309 -// });  
310 -// }); 277 +api.get('/messs/:conv_id', reqAuth, function (req, res) { // Liste des messs
  278 + MessServ.list(req.params.conv_id, giveBackNull(res, 200));
  279 +});
311 280
312 -api.post('/messs', reqMembre(), function (req, res) { // Ajout d'un mess 281 +api.post('/messs', reqMembre, function (req, res) { // Ajout d'un mess
313 data = req.body; 282 data = req.body;
314 data.login = req.session.data.login; 283 data.login = req.session.data.login;
315 - MessServ.add(data, function (err, mess) {  
316 - if (err)  
317 - res.status(500).send(err);  
318 - else  
319 - res.json(mess);  
320 - }); 284 + MessServ.add(data, giveBack(res, 201));
321 }); 285 });
322 286
323 -api.put('/messs', reqMembre(), function (req, res, next) { // Édition d'un mess  
324 - MessModl.findById(req.body._id, function (err, mess) { // TODO Fonction propre  
325 - // TODO Utiliser req.params  
326 - if (err) {  
327 - res.status(500).json(err);  
328 - } else {  
329 - if (mess) {  
330 - req.mess = mess;  
331 - next();  
332 - } else {  
333 - res.status(404).end();  
334 - }  
335 - }  
336 - });  
337 -}, reqOwn('mess'), function (req, res) {  
338 - req.mess.content = req.body.content; 287 +// Édition d'un mess
  288 +api.put('/messs/:_id', reqMembre, getSubject(MessModl), reqOwn('mess'), function (req, res) {
  289 + req.subject.content = req.body.content;
339 // TODO Edit date 290 // TODO Edit date
340 - req.mess.save(function (err, mess) {  
341 - if (err) // TODO Fonction propre  
342 - res.status(500).send(err);  
343 - else  
344 - res.json(mess);  
345 - }); 291 + req.subject.save(giveBack(res, 201));
346 }); 292 });
347 293
348 -api.delete('/messs/:mess_id', reqMembre(), function (req, res, next) { // Supression d'un mess  
349 - MessModl.findById(req.params.mess_id, function (err, mess) { // TODO Fonction propre  
350 - if (err) {  
351 - res.status(500).json(err);  
352 - } else {  
353 - if (mess) {  
354 - req.mess = mess;  
355 - next();  
356 - } else {  
357 - res.status(404).end();  
358 - }  
359 - }  
360 - });  
361 -}, reqOwn('mess'), function (req, res) {  
362 - req.mess.remove(function (err) {  
363 - if (err) // TODO Fonction propre  
364 - res.status(500).send(err);  
365 - else  
366 - res.status(205).end();  
367 - }); 294 +// Supression d'un mess
  295 +api.delete('/messs/:_id', reqMembre, getSubject(MessModl), reqOwn('mess'), function (req, res) {
  296 + req.subject.remove(giveBack(res, 205));
368 }); 297 });
369 298
370 api.all('/coffee', function (req, res) { 299 api.all('/coffee', function (req, res) {
public/js/controllers/ForumConvCtrl.js
@@ -8,10 +8,10 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct']) @@ -8,10 +8,10 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct'])
8 SessionServ.onChange(function () { 8 SessionServ.onChange(function () {
9 $scope.session = SessionServ.cur; 9 $scope.session = SessionServ.cur;
10 }); 10 });
11 - ApiServ("récupération de la conversation", 'get', 'convs', $routeParams.conv_id, function (err, conv) { 11 + ApiServ("récupération de la conversation", 'get', ['convs', $routeParams.conv_id], null, function (err, conv) {
12 if (!err) { 12 if (!err) {
13 $scope.conv = conv; 13 $scope.conv = conv;
14 - ApiServ("récupération des messages", 'get', 'messs', conv._id, function (err, messs) { 14 + ApiServ("récupération des messages", 'get', ['messs', conv._id], null, function (err, messs) {
15 if (!err) { 15 if (!err) {
16 $scope.messs = messs; 16 $scope.messs = messs;
17 } 17 }
@@ -33,7 +33,7 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct']) @@ -33,7 +33,7 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct'])
33 }; 33 };
34 34
35 $scope.delMess = function (index) { 35 $scope.delMess = function (index) {
36 - ApiServ("suppression du message", 'delete', 'messs', $scope.messs[index]._id, function (err) { 36 + ApiServ("suppression du message", 'delete', ['messs', $scope.messs[index]._id], null, function (err) {
37 if (!err) 37 if (!err)
38 $scope.messs.splice(index, 1); 38 $scope.messs.splice(index, 1);
39 }); 39 });
@@ -42,9 +42,10 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct']) @@ -42,9 +42,10 @@ angular.module('ForumConvCtrl', ['SessionsServ', 'ApiServ', 'MessEditDrct'])
42 $scope.editButton = function (index) { 42 $scope.editButton = function (index) {
43 mess = $scope.messs[index]; 43 mess = $scope.messs[index];
44 if (mess.editMode) { 44 if (mess.editMode) {
45 - ApiServ("édition du message", 'put', 'messs', mess, function (err, data) { 45 + ApiServ("édition du message", 'put', ['messs', mess._id], {
  46 + content: mess.content
  47 + }, function (err, data) {
46 if (!err) { 48 if (!err) {
47 - console.log(data);  
48 mess.content = data.content; 49 mess.content = data.content;
49 mess.editDate = data.editDate; 50 mess.editDate = data.editDate;
50 mess.editMode = false; 51 mess.editMode = false;
public/js/controllers/ForumDirCtrl.js
@@ -10,7 +10,7 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ']) @@ -10,7 +10,7 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ'])
10 $scope.session = SessionServ.cur; 10 $scope.session = SessionServ.cur;
11 }); 11 });
12 12
13 - ApiServ("récupération du dossier", 'get', 'dosss', $routeParams.doss_id, function (err, doss) { 13 + ApiServ("récupération du dossier", 'get', ['dosss', $routeParams.doss_id], null, function (err, doss) {
14 if (err) { 14 if (err) {
15 console.error(err); 15 console.error(err);
16 } else { 16 } else {
@@ -24,7 +24,6 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ']) @@ -24,7 +24,6 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ'])
24 24
25 // Dossiers 25 // Dossiers
26 $scope.addDoss = function () { 26 $scope.addDoss = function () {
27 - console.log('CALLA');  
28 $scope.formDoss.parent = $routeParams.doss_id; 27 $scope.formDoss.parent = $routeParams.doss_id;
29 ApiServ("création du dossier", 'post', 'dosss', $scope.formDoss, function (err, doss) { 28 ApiServ("création du dossier", 'post', 'dosss', $scope.formDoss, function (err, doss) {
30 if (!err) { 29 if (!err) {
@@ -35,7 +34,7 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ']) @@ -35,7 +34,7 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ'])
35 }; 34 };
36 35
37 $scope.delDoss = function (index) { 36 $scope.delDoss = function (index) {
38 - ApiServ("suppression du dossier", 'delete', 'dosss', $scope.dosss[index]._id, function (err) { 37 + ApiServ("suppression du dossier", 'delete', ['dosss', $scope.dosss[index]._id], null, function (err) {
39 if (!err) 38 if (!err)
40 $scope.dosss.splice(index, 1); 39 $scope.dosss.splice(index, 1);
41 }); 40 });
@@ -53,7 +52,7 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ']) @@ -53,7 +52,7 @@ angular.module('ForumDirCtrl', ['SessionsServ', 'ApiServ'])
53 }; 52 };
54 53
55 $scope.delConv = function (index) { 54 $scope.delConv = function (index) {
56 - ApiServ("suppression de la conversation", 'delete', 'convs', $scope.convs[index]._id, function (err) { 55 + ApiServ("suppression de la conversation", 'delete', ['convs', $scope.convs[index]._id], null, function (err) {
57 if (!err) 56 if (!err)
58 $scope.convs.splice(index, 1); 57 $scope.convs.splice(index, 1);
59 }); 58 });
public/js/controllers/MembreCtrl.js
@@ -8,7 +8,7 @@ angular.module('MembreCtrl', ['SessionsServ', 'ApiServ', 'ui.sortable']) @@ -8,7 +8,7 @@ angular.module('MembreCtrl', ['SessionsServ', 'ApiServ', 'ui.sortable'])
8 $scope.session = SessionServ.cur; 8 $scope.session = SessionServ.cur;
9 }); 9 });
10 10
11 - ApiServ("récupération de la liste des membres", 'get', 'membres', function (err, membres) { 11 + ApiServ("récupération de la liste des membres", 'get', 'membres', null, function (err, membres) {
12 if (!err) 12 if (!err)
13 $scope.membres = membres; 13 $scope.membres = membres;
14 }); 14 });
@@ -29,7 +29,7 @@ angular.module('MembreCtrl', ['SessionsServ', 'ApiServ', 'ui.sortable']) @@ -29,7 +29,7 @@ angular.module('MembreCtrl', ['SessionsServ', 'ApiServ', 'ui.sortable'])
29 }; 29 };
30 30
31 $scope.deleteMembre = function (index) { 31 $scope.deleteMembre = function (index) {
32 - ApiServ("création du membre", 'delete', 'membres', $scope.membres[index]._id, function (err, data) { 32 + ApiServ("création du membre", 'delete', ['membres', $scope.membres[index]._id], null, function (err, data) {
33 if (!err) { 33 if (!err) {
34 $scope.membres.splice(index, 1); 34 $scope.membres.splice(index, 1);
35 } 35 }
public/js/services/ApiServ.js
1 angular.module('ApiServ', ['NotifyServ']) 1 angular.module('ApiServ', ['NotifyServ'])
2 .service('ApiServ', function ($http, NotifyServ) { 2 .service('ApiServ', function ($http, NotifyServ) {
3 - return function (name, method, href) {  
4 - var cb;  
5 - link = '/api/' + href;  
6 - arglen = arguments.length;  
7 - if (typeof arguments[arglen - 1] == 'function') {  
8 - cb = arguments[arglen - 1];  
9 - arglen--;  
10 - } else { 3 + return function (name, method, params, data, cb) {
  4 + if (!cb) {
11 cb = function () { 5 cb = function () {
12 return undefined; 6 return undefined;
13 }; 7 };
14 } 8 }
15 9
16 - if (method == 'get' || method == 'delete') { // TODO url & data en même temps  
17 - for (arg = 3; arg < arglen; arg++) {  
18 - link += '/' + arguments[arg];  
19 - }  
20 - request = $http[method](link);  
21 - } else {  
22 - request = $http[method](link, arguments[3]); 10 + link = '/api';
  11 + if (typeof params == 'string') {
  12 + params = [params];
23 } 13 }
24 - request 14 + for (var param in params) {
  15 + link += '/' + params[param];
  16 + }
  17 + $http[method](link, data)
25 .success(function (data) { 18 .success(function (data) {
26 cb(null, data); 19 cb(null, data);
27 }) 20 })
public/views/membres.html
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 <th>Nom</th> 10 <th>Nom</th>
11 <th>Section</th> 11 <th>Section</th>
12 <th>Rôle</th> 12 <th>Rôle</th>
13 - <th ng-show="session.canAddMembre || session.canDelMembre">Action</th> 13 + <th ng-show="session.bureau">Action</th>
14 </tr> 14 </tr>
15 </thead> 15 </thead>
16 <tbody as-sortable="dragControlListeners" ng-model="membres"> 16 <tbody as-sortable="dragControlListeners" ng-model="membres">
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 <td>{{ membre.nom }}</td> 18 <td>{{ membre.nom }}</td>
19 <td>{{ membre.section }}</td> 19 <td>{{ membre.section }}</td>
20 <td>{{ membre.role }}</td> 20 <td>{{ membre.role }}</td>
21 - <td ng-show="session.canDelMembre"> 21 + <td ng-show="session.bureau">
22 <button type="button" class="btn btn-default" aria-label="Déplacer" data-as-sortable-item-handle> 22 <button type="button" class="btn btn-default" aria-label="Déplacer" data-as-sortable-item-handle>
23 <span class="glyphicon glyphicon-resize-vertical" aria-hidden="true"></span> 23 <span class="glyphicon glyphicon-resize-vertical" aria-hidden="true"></span>
24 </button> 24 </button>
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 </td> 28 </td>
29 </tr> 29 </tr>
30 </tbody> 30 </tbody>
31 - <tfoot id="membre-form" ng-show="session.canAddMembre"> 31 + <tfoot id="membre-form" ng-show="session.bureau">
32 <tr class="form-group"> 32 <tr class="form-group">
33 <td> 33 <td>
34 <input type="text" class="form-control input-lg" placeholder="Login Polytech" ng-model="formData.login"> 34 <input type="text" class="form-control input-lg" placeholder="Login Polytech" ng-model="formData.login">
@@ -46,4 +46,4 @@ @@ -46,4 +46,4 @@
46 </tr> 46 </tr>
47 </tfoot> 47 </tfoot>
48 </table> 48 </table>
49 -</div> 49 -</div>
  50 +</div>
50 \ No newline at end of file 51 \ No newline at end of file