Add collections

This commit is contained in:
Elliot DeNolf
2018-04-20 23:35:53 -06:00
parent 4798525dbe
commit 5867715598
5 changed files with 182 additions and 32 deletions

View File

@@ -2,12 +2,29 @@
const express = require('express');
const app = express();
const mongoose = require('mongoose');
app.set('view engine', 'pug');
// Get Payload class
const Payload = require('./payload');
// Initialize class
const payload = new Payload(app);
const payload = new Payload({
express: app,
mongoose,
baseURL: 'base123'
});
// Sample collection creation
let coolCollection = payload.newCollection('cool');
coolCollection.add({
test: { testProp: 'one', testProp2: 'two' }
});
coolCollection.register();
// Retrieve collection
let retrievedCollection = payload.getCollection('cool');
console.log(`Retrieved ${retrievedCollection.key} collection`);
console.log(`testProp: ${coolCollection.fields.test.testProp}`);
// Must add payload views here
app.set('views', [`${__dirname}/views`, payload.views]);

118
package-lock.json generated
View File

@@ -126,6 +126,14 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"async": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz",
"integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=",
"requires": {
"lodash": "4.17.5"
}
},
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
@@ -210,6 +218,11 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"bluebird": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
},
"body-parser": {
"version": "1.18.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
@@ -237,6 +250,11 @@
"concat-map": "0.0.1"
}
},
"bson": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz",
"integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ=="
},
"buffer-from": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
@@ -1066,6 +1084,11 @@
"promise": "7.3.1"
}
},
"kareem": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz",
"integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ=="
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -1094,6 +1117,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
"integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -1172,6 +1200,69 @@
"minimist": "0.0.8"
}
},
"mongodb": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.6.tgz",
"integrity": "sha512-nEg7SnzcyobArDTXEqvI1BasY6Z45h1lyBtVMCS9gRTkbtwrDn6WcLRa+MVRYufrJXxQPkAiYJQ94eCUzit0EQ==",
"requires": {
"mongodb-core": "3.0.6"
}
},
"mongodb-core": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.6.tgz",
"integrity": "sha512-EIaEyA4DEft4je4Hfa+CDswKdFhlev9V9o5KJo/nITgG6KNKz5Rxg5ZuMGEjGkMwFkydFQ3Kz0CxZ18AXhRrEg==",
"requires": {
"bson": "1.0.6",
"require_optional": "1.0.1"
}
},
"mongoose": {
"version": "5.0.15",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.15.tgz",
"integrity": "sha512-S37I7V8nZE7JgPExgqb7zOKqezhvQP3JNa60rQEfVESvPkuan2gk/KoYeww7UK/gkKii8mR7OLyuzfRTa7rxxQ==",
"requires": {
"async": "2.1.4",
"bson": "1.0.6",
"kareem": "2.0.6",
"lodash.get": "4.4.2",
"mongodb": "3.0.6",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.4.1",
"mquery": "3.0.0",
"ms": "2.0.0",
"regexp-clone": "0.0.1",
"sliced": "1.0.1"
}
},
"mongoose-legacy-pluralize": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
},
"mpath": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz",
"integrity": "sha512-NNY/MpBkALb9jJmjpBlIi6GRoLveLUM0pJzgbp9vY9F7IQEb/HREC/nxrixechcQwd1NevOhJnWWV8QQQRE+OA=="
},
"mquery": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz",
"integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==",
"requires": {
"bluebird": "3.5.0",
"debug": "2.6.9",
"regexp-clone": "0.0.1",
"sliced": "0.0.5"
},
"dependencies": {
"sliced": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
"integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
}
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -1520,6 +1611,11 @@
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
},
"regexp-clone": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
"integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
},
"regexpp": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
@@ -1549,6 +1645,15 @@
}
}
},
"require_optional": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
"requires": {
"resolve-from": "2.0.0",
"semver": "5.5.0"
}
},
"resolve": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
@@ -1557,6 +1662,11 @@
"path-parse": "1.0.5"
}
},
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
},
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@@ -1616,8 +1726,7 @@
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
},
"send": {
"version": "0.16.2",
@@ -1676,6 +1785,11 @@
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"sliced": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",

View File

@@ -11,6 +11,7 @@
"license": "ISC",
"dependencies": {
"express": "^4.16.3",
"mongoose": "^5.0.15",
"pug": "^2.0.3"
},
"devDependencies": {

17
payload/Collection.js Normal file
View File

@@ -0,0 +1,17 @@
class Collection {
constructor(payload, key) {
this.payload = payload;
this.key = key;
this.fields = {};
}
add(fields) {
this.fields = fields;
}
register() {
this.payload.collections[this.key] = this;
}
}
module.exports = Collection;

View File

@@ -1,42 +1,43 @@
const path = require('path');
let fs = require('fs');
const Collection = require('./Collection');
class Payload {
constructor(app) {
this.app = app;
constructor(options) {
this.app = options.express;
this.mongoose = options.mongoose;
this.baseURL = options.baseURL;
this.views = path.join(__dirname, 'views');
mountInternalModel(this.app, path.join(__dirname, 'models'), 'User');
mountDefaultViews(this.app);
}
}
this.collections = {};
let mountDefaultViews = function (app) {
fs.readdir(path.join(__dirname, 'views'), (err, files) => {
if (err) {
console.log("[Payload] Unable to load views");
this.app.get(`/payload/admin`, function (req, res) {
res.render('admin',
{
title: 'Payload Admin'
})
});
}
newCollection(key) {
if (key in this.collections)
{
console.log(`${key} already exists in collections`);
return;
}
files.forEach((file) => {
let fileNoExtension = file.replace(/\.[^/.]+$/, "");
console.log(`[Payload] Mounting ${file}...`);
app.get(`/payload/${fileNoExtension}`, function (req, res) {
res.render(fileNoExtension,
{
title: `Payload ${fileNoExtension}`
})
});
});
});
};
return new Collection(this, key);
}
let mountInternalModel = function (app, directory, modelName) {
app.get(`/payload/${modelName}`, function (req, res) {
const User = require(path.join(directory, modelName));
res.send(JSON.stringify(new User("John Doe", 22, "john@doe.com")));
});
};
getCollection(key) {
if (!(key in this.collections)) {
console.log(`${key} does not exist in collections or has not been registered yet`);
return;
}
return this.collections[key];
}
}
module.exports = Payload;