express-message-board/controllers/message.js
ak f36b48f4ce progress update
image uploading works
hosted at deta space
2023-09-20 18:00:32 -07:00

116 lines
3 KiB
JavaScript

const Message = require("../models/message.js");
const User = require("../models/user.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,
to: 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,
to: false,
});
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.respond_get = (req, res, next) => {
res.render("newmsg", {
user: req.user,
errors: false,
to: req.params.recipient,
});
};
exports.get = asyncHandler(async (req, res, next) => {
// find message
let message = await Message.findById(req.params.messageID).lean().exec();
// replace from field with actual user
const user = await User.findOne({ username: message.from }).lean().exec();
message.from = user;
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("/");
});