2019-06-20 17:17:45 +02:00
|
|
|
/*
|
|
|
|
* Main database access functions
|
|
|
|
*/
|
|
|
|
var common,
|
|
|
|
model = {};
|
|
|
|
|
|
|
|
const dbs = {
|
|
|
|
/* Method API route
|
|
|
|
* <- to server
|
|
|
|
* -> to client
|
|
|
|
* Description
|
|
|
|
*/
|
|
|
|
routes: {
|
|
|
|
"msg/ids": {
|
|
|
|
/* GET /api/msg/ids [no args]
|
|
|
|
* -> Array of message schema object ids
|
|
|
|
* Get ALL known message ids
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
get: function (req, res) {
|
|
|
|
model.Messages.find({}, {
|
|
|
|
_id: true
|
|
|
|
}).exec()
|
2019-06-20 17:17:45 +02:00
|
|
|
.then(results => {
|
2019-07-22 23:01:01 +02:00
|
|
|
//selects id from message:
|
|
|
|
var parsed = [];
|
|
|
|
for (var i in results) {
|
|
|
|
parsed.push(results[i]._id);
|
|
|
|
}
|
|
|
|
res.send(parsed);
|
|
|
|
})
|
|
|
|
.catch(err => {
|
|
|
|
console.log(err);
|
|
|
|
res.status(500).json(err);
|
|
|
|
});
|
2019-06-20 17:17:45 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
"msg/id": {
|
|
|
|
params: ":id",
|
|
|
|
/* GET /api/msg/id/[massage-id]
|
|
|
|
* -> Message schema
|
|
|
|
* Get a particular message
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
get: function (req, res) {
|
|
|
|
model.Messages.findById(req.params.id).exec(function (err, result) {
|
2019-06-20 17:17:45 +02:00
|
|
|
if (err) {
|
2019-07-22 23:01:01 +02:00
|
|
|
console.log(err);
|
2019-06-20 17:17:45 +02:00
|
|
|
res.status(404).json(err);
|
|
|
|
} else {
|
2019-06-20 23:30:51 +02:00
|
|
|
//console.log(JSON.stringify(result));
|
|
|
|
res.json(result);
|
2019-06-20 17:17:45 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
2019-06-27 10:28:48 +02:00
|
|
|
"msg/search": {
|
|
|
|
params: ":phrase",
|
|
|
|
/* GET /api/msg/id/[massage-id]
|
|
|
|
* -> Message schema
|
|
|
|
* Get a particular message
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
get: function (req, res) {
|
|
|
|
model.Messages.find({
|
|
|
|
$text: {
|
|
|
|
$search: req.params.phrase
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.sort({
|
|
|
|
tag: -1
|
|
|
|
})
|
|
|
|
.exec().then(results => {
|
|
|
|
//selects id from message:
|
|
|
|
var parsed = [];
|
|
|
|
for (var i in results) {
|
|
|
|
parsed.push(results[i]._id);
|
|
|
|
}
|
|
|
|
res.send(parsed);
|
|
|
|
})
|
|
|
|
.catch(err => {
|
|
|
|
console.log(err);
|
|
|
|
res.status(500).json(err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
2019-06-20 17:17:45 +02:00
|
|
|
"msg": {
|
|
|
|
/* POST /api/msg
|
|
|
|
* <- Message schema
|
|
|
|
* -> Message schema
|
|
|
|
* Create a new message
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
post: function (req, res) {
|
2019-06-20 17:17:45 +02:00
|
|
|
/*
|
|
|
|
if ( !(req.body.tags instanceof Array) ) {
|
|
|
|
return res.status(400).json({ error: "bad request" });
|
|
|
|
}*/
|
2019-06-20 23:30:51 +02:00
|
|
|
//console.log("Subject: "+JSON.stringify(req.body));
|
|
|
|
|
2019-06-20 17:17:45 +02:00
|
|
|
model.Messages.create({
|
|
|
|
subject: req.body.subject,
|
|
|
|
message: req.body.message,
|
|
|
|
user: req.body.user,
|
2019-06-20 23:30:51 +02:00
|
|
|
tag: req.body.tag
|
2019-07-22 23:01:01 +02:00
|
|
|
}, function (err, result) {
|
2019-06-20 17:17:45 +02:00
|
|
|
if (err) {
|
|
|
|
return res.status(401).json(err.message);
|
|
|
|
} else {
|
2019-07-22 23:01:01 +02:00
|
|
|
res.json({
|
|
|
|
message: "Message created!!"
|
|
|
|
});
|
2019-06-20 17:17:45 +02:00
|
|
|
}
|
|
|
|
if (result == null) {
|
|
|
|
return res.status(500).json("Can not create message.")
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
/* PUT /api/msg
|
|
|
|
* <-
|
|
|
|
* ->
|
|
|
|
* Update a message
|
|
|
|
*/
|
|
|
|
//put: function(req, res) {},
|
|
|
|
},
|
2019-06-25 14:43:33 +02:00
|
|
|
"tag/ids": {
|
|
|
|
/* GET /api/tag/ids [no args]
|
|
|
|
* -> Array of tag schema object ids
|
|
|
|
* Get ALL known tag ids
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
get: function (req, res) {
|
|
|
|
model.Tags.find({}, {
|
|
|
|
_id: true
|
|
|
|
}).exec()
|
2019-06-25 14:43:33 +02:00
|
|
|
.then(results => {
|
2019-07-22 23:01:01 +02:00
|
|
|
//selects id from tag:
|
|
|
|
var parsed = [];
|
|
|
|
for (var i in results) {
|
|
|
|
parsed.push(results[i]._id);
|
|
|
|
}
|
|
|
|
res.send(parsed);
|
|
|
|
})
|
|
|
|
.catch(err => {
|
|
|
|
console.log(err);
|
|
|
|
res.status(500).json(err);
|
|
|
|
});
|
2019-06-25 14:43:33 +02:00
|
|
|
},
|
|
|
|
},
|
2019-07-20 23:16:42 +02:00
|
|
|
"tag/id": {
|
2019-06-25 14:43:33 +02:00
|
|
|
params: ":id",
|
2019-07-20 23:16:42 +02:00
|
|
|
/* GET /api/tag/id/[tag-id]
|
2019-06-25 14:43:33 +02:00
|
|
|
* -> Tag schema
|
|
|
|
* Get a particular tag
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
get: function (req, res) {
|
2019-07-20 23:16:42 +02:00
|
|
|
model.Tags.findById(req.params.id)
|
2019-07-22 23:01:01 +02:00
|
|
|
.exec(function (err, result) {
|
|
|
|
if (err) {
|
|
|
|
console.log(err);
|
|
|
|
res.status(404).json(err);
|
|
|
|
} else {
|
|
|
|
//console.log(req.params.id);
|
|
|
|
res.json(result);
|
|
|
|
}
|
|
|
|
});
|
2019-06-25 14:43:33 +02:00
|
|
|
},
|
|
|
|
},
|
2019-07-24 12:36:43 +02:00
|
|
|
"usr/bookmark/ids": {
|
|
|
|
/* GET /api/usr/bookmark/ids [no args]
|
|
|
|
* -> Array of message schema object ids
|
|
|
|
* Get bookmark message ids
|
|
|
|
*/
|
|
|
|
|
|
|
|
get: function (req, res) {
|
|
|
|
model.Users.find({
|
|
|
|
},
|
|
|
|
function (err, result) {
|
|
|
|
if (err) {
|
|
|
|
return res.status(401).json(err.message);
|
|
|
|
} else {
|
|
|
|
var parsed = [];
|
|
|
|
for (var i in result) {
|
|
|
|
parsed.push(result[i].bookmarks);
|
|
|
|
}
|
|
|
|
console.log("bookmarks:" + JSON.stringify(parsed));
|
|
|
|
res.send(parsed);
|
|
|
|
}
|
|
|
|
if (result == null) {
|
|
|
|
return res.status(500).json("Can save bookmark.")
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
2019-07-20 23:16:42 +02:00
|
|
|
"usr/id": {
|
|
|
|
params: ":id",
|
|
|
|
/* GET /api/usr/[usr-id]
|
|
|
|
* -> User Schema
|
|
|
|
* Get a particular user
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
get: function (req, res) {
|
|
|
|
model.Users.find({
|
|
|
|
_id: req.params.id
|
|
|
|
})
|
|
|
|
.exec(function (err, result) {
|
|
|
|
if (err) {
|
|
|
|
console.log(err);
|
|
|
|
res.status(404).json(err);
|
|
|
|
} else {
|
|
|
|
console.log(result);
|
|
|
|
res.json(result);
|
|
|
|
}
|
|
|
|
});
|
2019-07-20 23:16:42 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
"usr": {
|
|
|
|
/* POST /api/usr
|
|
|
|
* <- User schema
|
|
|
|
* -> User schema
|
|
|
|
* Create a new user
|
|
|
|
*/
|
2019-07-23 10:34:20 +02:00
|
|
|
post: function(req, res) {
|
|
|
|
// console.info(req.body);
|
2019-07-22 23:01:01 +02:00
|
|
|
model.Users.create({
|
2019-07-23 10:34:20 +02:00
|
|
|
_id: req.body._id,
|
2019-07-20 23:16:42 +02:00
|
|
|
name: req.body.name,
|
2019-07-23 10:34:20 +02:00
|
|
|
mail: req.body.mail,
|
2019-07-20 23:16:42 +02:00
|
|
|
type: req.body.type,
|
2019-07-23 13:31:39 +02:00
|
|
|
gender: req.body.gender,
|
2019-07-20 23:16:42 +02:00
|
|
|
abos: req.body.abos,
|
|
|
|
bookmarks: req.body.bookmarks,
|
2019-07-23 10:34:20 +02:00
|
|
|
roles: req.body.roles,
|
|
|
|
}, function(err, result) {
|
2019-07-20 23:16:42 +02:00
|
|
|
if (err) {
|
2019-07-22 23:01:01 +02:00
|
|
|
console.log(err);
|
2019-07-20 23:16:42 +02:00
|
|
|
return res.status(401).json(err.message);
|
|
|
|
} else {
|
2019-07-23 10:34:20 +02:00
|
|
|
res.json({message: "User created!", user: req.body});
|
2019-07-20 23:16:42 +02:00
|
|
|
}
|
|
|
|
if (result == null) {
|
|
|
|
return res.status(500).json("Can not create user.")
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
/* PUT /api/usr
|
|
|
|
* <- User schema
|
|
|
|
* -> User schema
|
|
|
|
* Change a user
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
put: function (req, res) {
|
|
|
|
|
|
|
|
model.Users.find({
|
|
|
|
_id: req.body.userid
|
|
|
|
})
|
|
|
|
.exec(function (err, entry) {
|
|
|
|
if (err) {
|
|
|
|
console.log(err);
|
|
|
|
} else {
|
|
|
|
|
|
|
|
model.Users.update({
|
|
|
|
_id: req.body.userid
|
|
|
|
}, {
|
|
|
|
bookmarks: req.body.bookmark
|
|
|
|
}, function (err, data) {
|
|
|
|
|
|
|
|
if (err) {
|
|
|
|
console.log(err);
|
|
|
|
} else {
|
|
|
|
res.json({
|
|
|
|
id: "Bookmark saved"
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (data == null) {
|
|
|
|
return res.status(404).json(err.message);
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (entry == null)
|
|
|
|
return res.status(404).json(err.message);
|
|
|
|
// TODO Catch edge cases
|
|
|
|
|
2019-07-20 23:16:42 +02:00
|
|
|
// TODO Save/Update user
|
|
|
|
/*
|
|
|
|
_id: req.body.id,
|
|
|
|
name: req.body.name,
|
|
|
|
type: req.body.type,
|
|
|
|
roles: req.body.roles,
|
|
|
|
hash: req.body.hash,
|
|
|
|
salt: req.body.salt,
|
|
|
|
pwd: req.body.pwd,
|
|
|
|
abos: req.body.abos,
|
|
|
|
bookmarks: req.body.bookmarks,
|
|
|
|
*/
|
2019-07-22 23:01:01 +02:00
|
|
|
// res.json(data);
|
2019-07-20 23:16:42 +02:00
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
2019-06-20 17:17:45 +02:00
|
|
|
},
|
|
|
|
/* Initialize requirements
|
|
|
|
* - DB connection
|
|
|
|
* - DB schemata
|
|
|
|
*/
|
|
|
|
init: function (_common) {
|
|
|
|
common = _common;
|
|
|
|
|
|
|
|
/* DB Connection
|
|
|
|
* Local db: common.config.dbLocalConn
|
|
|
|
* TH db: common.config.dbConn
|
|
|
|
*/
|
2019-07-24 16:54:35 +02:00
|
|
|
common.mongoose.connect(common.config.dbConn, {
|
2019-06-20 17:17:45 +02:00
|
|
|
useNewUrlParser: true
|
|
|
|
}).then(() => {
|
|
|
|
console.log("Database connected successfully.");
|
|
|
|
}).catch(err => {
|
|
|
|
console.log('Database connection error.');
|
|
|
|
process.exit();
|
|
|
|
});
|
2019-07-19 23:12:38 +02:00
|
|
|
// Default 'collection.ensureIndex' is deprecated; New is '.createIndexes'
|
|
|
|
common.mongoose.set('useCreateIndex', true);
|
2019-06-20 17:17:45 +02:00
|
|
|
|
|
|
|
/* DB Schemata
|
|
|
|
* Privat fields:
|
|
|
|
* - per model: _list: Elements that are included in list fetch
|
|
|
|
* - per entry: _comment: Comment for Admin UI - TODO: not working yet
|
|
|
|
*/
|
|
|
|
var messageSchema = common.mongoose.Schema({
|
2019-07-22 23:01:01 +02:00
|
|
|
subject: {
|
|
|
|
type: String,
|
|
|
|
required: true,
|
|
|
|
_comment: ""
|
|
|
|
},
|
|
|
|
message: {
|
|
|
|
type: String,
|
|
|
|
required: true,
|
|
|
|
_comment: ""
|
|
|
|
},
|
|
|
|
user: {
|
|
|
|
type: String,
|
|
|
|
required: true,
|
|
|
|
_comment: ""
|
|
|
|
},
|
|
|
|
tag: {
|
|
|
|
type: [String],
|
|
|
|
_comment: ""
|
|
|
|
},
|
2019-06-20 17:17:45 +02:00
|
|
|
//createtime: { type: Date, default: Date.now },
|
|
|
|
});
|
2019-07-22 23:01:01 +02:00
|
|
|
messageSchema.index({
|
|
|
|
"$**": 'text'
|
|
|
|
});
|
2019-06-20 17:17:45 +02:00
|
|
|
model.Messages = common.mongoose.model('messages', messageSchema);
|
2019-07-22 23:01:01 +02:00
|
|
|
model.Messages._list = [""];
|
2019-06-20 17:17:45 +02:00
|
|
|
|
|
|
|
var tagSchema = common.mongoose.Schema({
|
2019-07-22 23:01:01 +02:00
|
|
|
name: {
|
|
|
|
type: String,
|
|
|
|
required: true,
|
|
|
|
_comment: ""
|
|
|
|
}, //unique
|
2019-06-20 17:17:45 +02:00
|
|
|
});
|
|
|
|
model.Tags = common.mongoose.model('tags', messageSchema);
|
2019-07-22 23:01:01 +02:00
|
|
|
model.Tags._list = [""];
|
2019-06-20 17:17:45 +02:00
|
|
|
|
|
|
|
var userSchema = common.mongoose.Schema({
|
2019-07-23 10:34:20 +02:00
|
|
|
_id: { type: String, required: true },
|
|
|
|
name: { type: String,
|
|
|
|
_comment: "" },
|
|
|
|
mail: { type: String },
|
|
|
|
type: { type: String },
|
2019-07-23 13:31:39 +02:00
|
|
|
gender: { type: String },
|
2019-07-23 10:34:20 +02:00
|
|
|
pwd: { type: String,
|
|
|
|
_comment: "" },
|
|
|
|
hash: { type: String },
|
|
|
|
salt: { type: String },
|
|
|
|
abos: { type: [String],
|
|
|
|
_comment: "" },
|
2019-06-20 17:17:45 +02:00
|
|
|
//deactivated: { type: Boolean },
|
|
|
|
//host: { type: Boolean },
|
2019-07-23 10:34:20 +02:00
|
|
|
bookmarks: { type: [String],
|
|
|
|
_comment: "" },
|
|
|
|
sessionid: { type: String },
|
2019-07-24 12:36:43 +02:00
|
|
|
roles: { type: String, required: true,
|
2019-07-23 10:34:20 +02:00
|
|
|
_comment: "" },
|
2019-06-20 17:17:45 +02:00
|
|
|
});
|
|
|
|
model.Users = common.mongoose.model('users', userSchema);
|
2019-07-22 23:01:01 +02:00
|
|
|
model.Users._list = [""];
|
2019-06-20 17:17:45 +02:00
|
|
|
},
|
|
|
|
models: model,
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = dbs;
|