mongo reposityory

This commit is contained in:
jleveau 2020-10-12 16:09:41 +02:00
parent 4995182651
commit 20ec2747ae
5 changed files with 268 additions and 49 deletions

View file

@ -1,5 +1,9 @@
inMemoryWorkshop = []
let inMemoryWorkshop;
function init() {
inMemoryWorkshop = [];
return Promise.resolve();
}
function getWorkshopList() {
return new Promise((resolve, ) => {
@ -38,13 +42,14 @@ function removeWorkshopByName(name) {
})
}
function updateWorkshop(name) {
function updateWorkshop(name, description) {
return new Promise((resolve, reject) => {
reject(new Error("Not implemented"))
})
}
module.exports = {
init,
getWorkshopList,
getWorkshopByName,
addWorkshop,

View file

@ -1,38 +1,41 @@
const express = require('express')
const app = express()
const InMemoryWorkshop = require("./inMemoryWorkshop")
const path = require("path")
const ejs = require('ejs')
var bodyParser = require('body-parser')
const repository = require('./inMemoryWorkshop');
//const repository = require("./mongoWorkshop");
app.use(bodyParser.urlencoded({ extended: false }))
repository.init().then(() => {
// set the view engine to ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '..', '/ejs'));
app.use(express.static(path.join(__dirname , '..', 'css')));
app.use(bodyParser.urlencoded({ extended: false }))
// set the view engine to ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '..', '/ejs'));
app.use(express.static(path.join(__dirname , '..', 'css')));
app.get('/', function (req, res) {
InMemoryWorkshop.getWorkshopList()
app.get('/', function (req, res) {
repository.getWorkshopList()
.then(workshops => {
res.render("index", {
workshops: workshops
})
})
})
})
app.get('/workshop', function (req, res) {
app.get('/workshop', function (req, res) {
console.log("get")
res.render('workshop')
})
})
app.post('/workshop', function (req, res) {
app.post('/workshop', function (req, res) {
const name = req.body.name
const description = req.body.description
InMemoryWorkshop.addWorkshop(name, description).then(() => {
InMemoryWorkshop.getWorkshopList()
repository.addWorkshop(name, description).then(() => {
repository.getWorkshopList()
.then(workshops => {
res.render("index", {
workshops: workshops
@ -40,25 +43,28 @@ app.post('/workshop', function (req, res) {
})
})
.catch(e =>res.send(e.message))
})
})
app.get('/workshop/:name', function (req, res) {
app.get('/workshop/:name', function (req, res) {
const workshopName = req.params.name
InMemoryWorkshop.getWorkshopByName(workshopName)
repository.getWorkshopByName(workshopName)
.then(workshop => {
res.render('ejs/workshop', workshop)
})
.catch(e =>ejs.send(e.message))
})
})
app.post('/remove-workshop', function (req, res) {
app.post('/remove-workshop', function (req, res) {
res.status(500).send("TODO")
})
})
app.post('/update-workshop', function(req, res) {
app.post('/update-workshop', function(req, res) {
res.status(500).send("TODO")
})
})
app.listen(3000, function () {
app.listen(3000, function () {
console.log('Workshop app listening on port 3000!')
})
})

89
js/mongoWorkshop.js Normal file
View file

@ -0,0 +1,89 @@
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'workshopDatabase';
const COLLECTION_NAME = "workshops"
let db;
function init() {
return new Promise((resolve, reject) => {
MongoClient.connect(url, function(err, client) {
if (err) {
return reject(err)
}
console.log("Connected successfully to server");
db = client.db(dbName);
resolve();
});
})
}
function getWorkshopList() {
return new Promise((resolve, reject) => {
const collection = db.collection(COLLECTION_NAME);
collection.find({}).toArray(function(err, workshops) {
if (err) {
return reject(err);
}
return resolve(workshops)
})
})
}
function getWorkshopByName(name) {
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("name parameter is required"))
}
const collection = db.collection(COLLECTION_NAME);
collection.find({
name
}).toArray(function(err, workshops) {
if (err) {
return reject(err);
}
if (workshops.length > 0) {
return resolve(workshops[0])
} else {
return resolve(null)
}
})
})
}
function addWorkshop(name, description) {
if (!name) {
return Promise.reject(new Error("Workshop name required"));
}
if (!description) {
return Promise.reject(new Error("Workshop description required"));
}
const collection = db.collection(COLLECTION_NAME);
return collection.insert({
name, description
}).then(() => {return})
}
function removeWorkshopByName(name) {
const collection = db.collection(COLLECTION_NAME);
return collection.deleteMany({
name
}).then(() => {return})
}
function updateWorkshop(name, description) {
const collection = db.collection(COLLECTION_NAME);
return collection.updateMany({
name
}, {
description
}).then(() => {return})
}
module.exports = {
init,
getWorkshopList,
getWorkshopByName,
addWorkshop,
removeWorkshopByName,
updateWorkshop
}

117
package-lock.json generated
View file

@ -18,6 +18,15 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"bl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
}
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
@ -35,6 +44,11 @@
"type-is": "~1.6.17"
}
},
"bson": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
"integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@ -63,6 +77,11 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -71,6 +90,11 @@
"ms": "2.0.0"
}
},
"denque": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@ -197,11 +221,22 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
"optional": true
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@ -230,6 +265,19 @@
"mime-db": "1.40.0"
}
},
"mongodb": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz",
"integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==",
"requires": {
"bl": "^2.2.1",
"bson": "^1.1.4",
"denque": "^1.4.1",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2",
"saslprep": "^1.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -258,6 +306,11 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proxy-addr": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@ -288,6 +341,34 @@
"unpipe": "1.0.0"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"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.1.0"
}
},
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@ -298,6 +379,20 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@ -341,11 +436,28 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@ -365,6 +477,11 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",

View file

@ -4,6 +4,7 @@
"description": "",
"main": "index.js",
"scripts": {
"start": "node js index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
@ -11,6 +12,7 @@
"dependencies": {
"body-parser": "^1.19.0",
"ejs": "^2.7.1",
"express": "^4.17.1"
"express": "^4.17.1",
"mongodb": "^3.6.2"
}
}