This repository has been archived on 2024-12-31. You can view files and clone it, but cannot push or open issues or pull requests.

82 lines
3.0 KiB
JavaScript

const app = require('express').Router();
const checkPermission = require("../middlewares/checkPermission");
const shopValidation = require("../validation/shopValidation");
const Article = require("../models/Article");
const ActivatedArticle = require("../models/ActivatedArticle");
const {owns} = require("../validation/shopValidation");
app.get("/", checkPermission("shop.info"), async (req, res) => {
// Validate request
const {error} = shopValidation.info.validate(req.query);
if (error) return res.status(400).json({message: error.details[0].message});
// Get article info
const info = await ActivatedArticle.findAndCountAll({where: req.query});
// Return info
if (info) {
res.status(200).json(info.rows);
} else res.json(404).json({message: "Article not found"});
});
app.get("/owns", checkPermission("shop.info"), async (req, res) => {
// Validate request
const {error} = shopValidation.owns.validate(req.query);
if (error) return res.status(400).json({message: error.details[0].message});
if (await Article.findByPk(req.query.articleID) === null) return res.status(404).json({message: "Article not found"});
// Get the article information
const info = await ActivatedArticle.findOne({
where: {
articleID: req.query.articleID,
guildID: req.query.guildID
}
});
const premiumInfo = await ActivatedArticle.findOne({
where: {
articleID: 1,
guildID: req.query.guildID
}
});
res.status(200).json(info !== null || premiumInfo !== null);
});
app.delete("/", checkPermission("shop.delete"), async (req, res) => {
// Validate request
const {error} = shopValidation.owns.validate(req.body);
if (error) return res.status(400).json({message: error.details[0].message});
// Check if already exists
const {count: articleCount} = await ActivatedArticle.findAndCountAll({where: req.body});
if (articleCount === 0) return res.status(400).json({message: "Article does not exist"});
// Delete the article
await ActivatedArticle.destroy({where: req.body});
res.status(200).json({message: "Article deleted successfully"});
});
app.put("/", checkPermission("shop.buy"), async (req, res) => {
// Validate request
const {error} = shopValidation.buy.validate(req.body);
if (error) return res.status(400).json({message: error.details[0].message});
// Check if article exists
const article = await Article.findByPk(req.body.articleID);
if (!article) return res.status(404).json({message: "Article does not exist"});
if (!req.body.expiry_date) req.body.expiry_date = new Date("4000-01-01");
// Check if article limit reached
const {count} = await ActivatedArticle.findAndCountAll({where: req.body});
if (count >= article.maxOwnCount) return res.status(400).json({message: "Maximum limit of this item reached"});
res.status(200).json(await ActivatedArticle.create(req.body));
});
module.exports = app;