MeteoriteH/Back/routes/api/feed.js

70 lines
1.8 KiB
JavaScript

const express = require("express")
const router = express.Router()
const { requireAuth } = require("./../../middleware/authmiddleware")
const User = require("./../../model/user.js")
const bodyParser = require("body-parser")
router.use(bodyParser.json())
router.post("/share", requireAuth, async (req, res) => {
let { sharevalue } = req.body
if (!sharevalue || typeof sharevalue !== "string") {
return res.json({ status: "error", error: "Share value not sent!" })
}
if (sharevalue.length > 100) {
return res.json({ status: "error", error: "Share value too long!" })
}
const date = new Date().getTime()
if (date - req.userdocument?.lastfeedsharetime < 3600000) {
return res.json({
status: "error",
error: "You can only share once an hour!",
})
}
let posterid = req.userdocument.userid
User.updateOne(
{ userid: req.userdocument.userid },
{
$push: {
feed: { posterid, content: sharevalue, date, moderated: false },
},
$set: {
lastfeedsharetime: date,
},
},
function (err, doc) {},
)
res.json({ status: "success", message: "Done!" }) // the next operation could take some time and we wouldn't want the client to cancel during that!!
if (req.userdocument.friends) {
//console.log(req.userdocument.friends)
for (let item of req.userdocument.friends) {
User.updateOne(
{ userid: item.userid },
{
$push: {
feed: {
posterid,
content: sharevalue,
date,
moderated: false,
},
},
},
function (err, doc) {},
)
}
}
})
router.post("/fetch", requireAuth, async (req, res) => {
let feed = await User.findOne({ userid: req.userdocument.userid })
.lean()
.populate({ path: "feed.userdata", select: ["username"] })
.select("feed")
return res.json({ status: "success", data: feed.feed })
})
module.exports = router