MeteoriteH/Back/routes/catalog.js

263 lines
6.4 KiB
JavaScript

const express = require("express")
const router = express.Router()
const { requireAuth } = require("./../middleware/authmiddleware")
const User = require("./../model/item.js")
const bodyParser = require("body-parser")
router.use(bodyParser.json())
const xss = require("xss")
router.post("/fetch", async (req, res) => {
const resultsPerPage = 30
let page = req.body.page ?? 0
if (page != 0) {
page -= 1
}
let { filter, sort } = req.body
let libraryassets = ["User Ad", "Gamepass", "Video"] // we don't want to include these in the catalog
//console.log(req.body)
try {
if (filter === "Best Selling") {
if (sort != "All") {
response = await User.find({
Type: sort,
Hidden: { $exists: false },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.sort({ Sales: "descending" })
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Type: sort,
Hidden: { $exists: false },
})
}
if (sort === "All") {
response = await User.find({
Hidden: { $exists: false },
Type: { $nin: libraryassets },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.sort({ Sales: "descending" })
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Hidden: { $exists: false },
Type: { $nin: libraryassets },
})
}
} else {
if (sort != "All") {
response = await User.find({
Type: sort,
Hidden: { $exists: false },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Type: sort,
Hidden: { $exists: false },
})
}
if (sort === "All") {
response = await User.find({
Hidden: { $exists: false },
Type: { $nin: libraryassets },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Hidden: { $exists: false },
Type: { $nin: libraryassets },
})
}
}
//console.log(response.length)
res.json({
data: response,
pages: Math.ceil(Math.max(responsecount / resultsPerPage, 1)),
})
} catch (error) {
res.json({ status: "error", error: "idk" })
}
})
router.get("/iteminfo/:id", async (req, res) => {
var id = req.params.id
if (isNaN(parseInt(id)) === true) {
return res.json({ status: "error", error: "Must be number" })
}
const response = await User.findOne({ ItemId: id }).lean()
if (!response) {
return res.json({ status: "error", error: "Not found" })
}
return res.json({ error: false, iteminfo: response })
})
router.post("/iteminfo/:id/configure", requireAuth, async (req, res) => {
var id = req.params.id
let { name, description, price } = req.body
if (
typeof name === "undefined" &&
typeof description === "undefined" &&
typeof price === "undefined"
) {
return res.json({ status: "error", error: "Nothing to update" })
}
if (isNaN(parseInt(id)) === true) {
return res.json({ status: "error", error: "Must be number" })
}
const response = await User.findOne({ ItemId: parseInt(id) })
if (!response) {
return res.json({ status: "error", error: "Not found" })
}
if (
response.Creator !== req.userdocument.userid &&
req.userdocument.admin === false
) {
return res.status(401).json({ status: "error", error: "Unauthorized!" })
}
let save = false
if (price && price != null) {
if (isNaN(parseInt(price)) === true) {
return res.json({ status: "error", error: "Must be number" })
}
price = parseInt(price)
if (price < 5 && response.Type != "Gamepass") {
return res.json({
status: "error",
error: "Minimum price is 5 rocks.",
})
} else if (price < 1 && response.Type === "Gamepass") {
return res.json({
status: "error",
error: "Minimum price is 1 rock.",
})
}
response.Price = price
response.markModified("Price")
save = true
}
if (description && description != "") {
response.Description = xss(description)
response.markModified("Description")
save = true
}
if (name && name != "") {
response.Name = xss(name)
response.markModified("Name")
save = true
}
if (save === true) {
await response.save()
}
console.log(name, description, price)
return res.json({ status: "success", message: "Item updated!" })
})
router.post("/search", async (req, res) => {
const resultsPerPage = 30
let page = req.body.page ?? 0
if (page != 0) {
page -= 1
}
let { filter, sort, searchquery } = req.body
function escapeRegex(text) {
return text?.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
}
const regex = new RegExp(escapeRegex(searchquery), "gi")
//console.log(req.body)
try {
if (filter === "Best Selling") {
if (sort != "All") {
response = await User.find({
Name: regex,
Type: sort,
Hidden: { $exists: false },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.sort({ Sales: "descending" })
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Type: sort,
Hidden: { $exists: false },
})
}
if (sort === "All") {
response = await User.find({
Name: regex,
Hidden: { $exists: false },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.sort({ Sales: "descending" })
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Hidden: { $exists: false },
})
}
} else {
if (sort != "All") {
response = await User.find({
Name: regex,
Type: sort,
Hidden: { $exists: false },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Type: sort,
Hidden: { $exists: false },
})
}
if (sort === "All") {
response = await User.find({
Name: regex,
Hidden: { $exists: false },
})
.limit(resultsPerPage)
.skip(0 + parseFloat(page) * resultsPerPage)
.lean()
.select(["-_id"])
responsecount = await User.countDocuments({
Hidden: { $exists: false },
})
}
}
//console.log(response.length)
res.json({
data: response,
pages: Math.ceil(Math.max(responsecount / resultsPerPage, 1)),
})
} catch (error) {
res.json({ status: "error", error: "idk" })
}
})
module.exports = router