Browse Source

Generalised CRUD route maker

Fela Maslen 7 years ago
parent
commit
22c0263b51
3 changed files with 41 additions and 48 deletions
  1. 36 0
      src/server/modules/crud.js
  2. 0 46
      src/server/routes/employees.js
  3. 5 2
      src/server/routes/index.js

+ 36 - 0
src/server/modules/crud.js

@@ -1,8 +1,43 @@
 const joi = require('joi');
+const { Router } = require('express');
 
 const { getObjectId } = require('server/modules/db');
 const { clientError } = require('server/modules/client-error');
 
+function makeCrudRoutes(config, db, name, app, crud) {
+    const router = new Router();
+
+    router.get('/', async (req, res) => {
+
+        const users = await crud.getDocs(db);
+
+        res.json({ [name]: users });
+    });
+
+    router.post('/', async (req, res) => {
+
+        const result = await crud.insertDoc(db, req.body);
+
+        res.json(result);
+    });
+
+    router.put('/:id', async (req, res) => {
+
+        await crud.modifyDoc(db, req.params.id, req.body);
+
+        res.json({ ok: true });
+    });
+
+    router.delete('/:id', async (req, res) => {
+
+        await crud.deleteDoc(db, req.params.id);
+
+        res.json({ ok: true });
+    });
+
+    app.use(`/${name}`, router);
+}
+
 function makeInsertDoc(collection, schema) {
     const schemaRequired = Object.keys(schema)
         .reduce((items, key) => ({
@@ -87,6 +122,7 @@ function makeMongoCrud(collection, schema) {
 }
 
 module.exports = {
+    makeCrudRoutes,
     makeMongoCrud
 };
 

+ 0 - 46
src/server/routes/employees.js

@@ -1,46 +0,0 @@
-const { Router } = require('express');
-
-const {
-    makeUserCrud
-} = require('server/modules/users');
-
-function employees(config, db) {
-    const router = new Router();
-
-    const crud = makeUserCrud();
-
-    router.get('/', async (req, res) => {
-
-        const users = await crud.getDocs(db);
-
-        res.json({ employees: users });
-    });
-
-    router.post('/', async (req, res) => {
-
-        const result = await crud.insertDoc(db, req.body);
-
-        res.json(result);
-    });
-
-    router.put('/:id', async (req, res) => {
-
-        await crud.modifyDoc(db, req.params.id, req.body);
-
-        res.json({ ok: true });
-    });
-
-    router.delete('/:id', async (req, res) => {
-
-        await crud.deleteDoc(db, req.params.id);
-
-        res.json({ ok: true });
-    });
-
-    return router;
-}
-
-module.exports = {
-    employees
-};
-

+ 5 - 2
src/server/routes/index.js

@@ -1,6 +1,9 @@
 const { Router } = require('express');
 
-const { employees } = require('server/routes/employees');
+const { makeCrudRoutes } = require('server/modules/crud');
+
+const { makeUserCrud } = require('server/modules/users');
+
 const { annoyUsers } = require('server/routes/annoy');
 
 function apiRoutes(config, db, logger) {
@@ -10,7 +13,7 @@ function apiRoutes(config, db, logger) {
         res.send('OK');
     });
 
-    router.use('/employees', employees(config, db));
+    makeCrudRoutes(config, db, 'employees', router, makeUserCrud());
 
     router.post('/annoy', annoyUsers(config, db, logger));