82 lines
3.0 KiB
JavaScript
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;
|