102 lines
2.7 KiB
JavaScript
102 lines
2.7 KiB
JavaScript
const Message = require("../models/message.js");
|
|
const asyncHandler = require("express-async-handler");
|
|
const { body, validationResult } = require("express-validator");
|
|
const { default: mongoose } = require("mongoose");
|
|
|
|
exports.new_get = (req, res, next) => {
|
|
res.render("newmsg", {
|
|
user: req.user,
|
|
errors: false,
|
|
});
|
|
};
|
|
|
|
exports.new_post = [
|
|
// Validate and sanitize fields
|
|
body("to", "Please enter recipient!").optional().trim().escape(),
|
|
body("text", "Please enter message!").trim().isLength({ min: 1 }),
|
|
|
|
// Process request after validation and sanitization.
|
|
asyncHandler(async (req, res, next) => {
|
|
// Extract the validation errors from a request.
|
|
const errors = validationResult(req);
|
|
|
|
// if there are validation errors
|
|
if (!errors.isEmpty()) {
|
|
// Render the creation form again with sanitized values/error messages.
|
|
res.render("newmsg", {
|
|
errors: errors.array(),
|
|
user: req.user,
|
|
});
|
|
return;
|
|
}
|
|
// check for to field entry - if empty, set to "all"
|
|
let to;
|
|
req.body.to.length > 0 ? (to = req.body.to) : (to = "all");
|
|
// else data from form is valid.
|
|
let message = new Message({
|
|
to: to,
|
|
from: req.user.username,
|
|
date: new Date(),
|
|
updated: new Date(),
|
|
text: req.body.text,
|
|
_id: new mongoose.Types.ObjectId(),
|
|
});
|
|
|
|
await message.save();
|
|
|
|
// saved. Redirect to index.
|
|
res.redirect(`/`);
|
|
}),
|
|
];
|
|
|
|
exports.get = asyncHandler(async (req, res, next) => {
|
|
// find message
|
|
const message = await Message.findById(req.params.messageID).lean().exec();
|
|
res.render("message", {
|
|
message: message,
|
|
user: req.user,
|
|
});
|
|
});
|
|
|
|
exports.put_get = asyncHandler(async (req, res, next) => {
|
|
const message = await Message.findById(req.params.messageID).lean().exec();
|
|
res.render("editmsg", {
|
|
user: req.user,
|
|
message: message,
|
|
errors: false,
|
|
});
|
|
});
|
|
|
|
exports.put = [
|
|
// Validate and sanitize fields
|
|
body("text", "Please enter updated message!").trim().isLength({ min: 1 }),
|
|
|
|
asyncHandler(async (req, res, next) => {
|
|
// find message
|
|
const dbMessage = await Message.findById(req.params.messageID)
|
|
.lean()
|
|
.exec();
|
|
|
|
const message = new Message({
|
|
to: dbMessage.to,
|
|
from: dbMessage.from,
|
|
date: dbMessage.date,
|
|
updated: new Date(),
|
|
text: req.body.text,
|
|
_id: dbMessage._id,
|
|
});
|
|
|
|
await Message.findByIdAndUpdate(dbMessage._id, message, {});
|
|
|
|
// saved. Redirect to message page.
|
|
res.redirect(`/msg/${message._id}`);
|
|
}),
|
|
];
|
|
|
|
exports.delete = asyncHandler(async (req, res, next) => {
|
|
// delete message from database
|
|
await Message.findByIdAndDelete(req.params.messageID);
|
|
|
|
// redirect home
|
|
res.redirect("/");
|
|
});
|