Added the Sheepstar API to the Archive
This commit is contained in:
135
SheepstarAPIV1/routes/gift.js
Normal file
135
SheepstarAPIV1/routes/gift.js
Normal file
@ -0,0 +1,135 @@
|
||||
const app = require('express').Router();
|
||||
const crypto = require('crypto');
|
||||
const checkPermission = require("../middlewares/checkPermission");
|
||||
const giftValidation = require("../validation/giftValidation");
|
||||
const Article = require("../models/Article");
|
||||
const Gift = require("../models/Gift");
|
||||
const ActivatedArticle = require("../models/ActivatedArticle");
|
||||
|
||||
app.put("/", checkPermission("admin.gift.create"), async (req, res) => {
|
||||
// Validate request
|
||||
const {error} = giftValidation.create.validate(req.body);
|
||||
if (error) return res.status(400).json({message: error.details[0].message});
|
||||
|
||||
// Set optional fields
|
||||
const giftID = (req.body.giftID || crypto.randomBytes(15).toString("hex")).toUpperCase();
|
||||
const expiry_date = new Date(req.body.expiry_date || new Date("4000-01-01"));
|
||||
const item_expiry_date = new Date(req.body.item_expiry_date || new Date("4000-01-01"));
|
||||
|
||||
// Check if article exists
|
||||
const {count: articleCount} = await Article.findAndCountAll({where: {id: req.body.articleID}});
|
||||
if (articleCount === 0) return res.status(400).json({message: "Article does not exist"});
|
||||
|
||||
// Check if code already exists
|
||||
const {count: codeCount} = await Gift.findAndCountAll({where: {giftID: giftID}});
|
||||
if (codeCount === 1) return res.status(400).json({message: "Code already exists"});
|
||||
|
||||
// Create gift
|
||||
await Gift.create({
|
||||
giftID: giftID,
|
||||
articleID: req.body.articleID,
|
||||
expiry_date: expiry_date,
|
||||
item_expiry_date: item_expiry_date
|
||||
});
|
||||
|
||||
// Return gift
|
||||
res.status(200).json({
|
||||
giftID: giftID, articleID: req.body.articleID,
|
||||
expiry_date: expiry_date.toISOString(), item_expiry_date: item_expiry_date.toISOString()
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/:giftID", checkPermission("admin.gift.info"), async (req, res) => {
|
||||
// Validate request
|
||||
if (!req.params.giftID) return res.status(400).json({message: "Gift ID is required"});
|
||||
|
||||
// Check if code is in database
|
||||
const giftInfo = await Gift.findOne({where: {giftID: req.params.giftID}});
|
||||
|
||||
// Return info
|
||||
if (giftInfo)
|
||||
res.status(200).json(giftInfo);
|
||||
else res.status(404).json({message: "Gift not found"});
|
||||
});
|
||||
|
||||
app.delete("/:giftID", checkPermission("admin.gift.delete"), async (req, res) => {
|
||||
// Validate request
|
||||
if (!req.params.giftID) return res.status(400).json({message: "Gift ID is required"});
|
||||
|
||||
// Check if code exists
|
||||
const {count} = await Gift.findAndCountAll({where: {giftID: req.params.giftID}});
|
||||
if (count === 0) return res.status(400).json({message: "Gift not found"});
|
||||
|
||||
// Delete code
|
||||
await Gift.destroy({where: {giftID: req.params.giftID}});
|
||||
|
||||
// Send response
|
||||
res.status(200).json({message: "Gift successfully deleted"});
|
||||
});
|
||||
|
||||
app.patch("/", checkPermission("admin.gift.update"), async (req, res) => {
|
||||
// Validate request
|
||||
const {error} = giftValidation.update.validate(req.body);
|
||||
if (error) return res.status(400).json({message: error.details[0].message});
|
||||
|
||||
// Check if code exists
|
||||
const {count} = await Gift.findAndCountAll({where: {giftID: req.body.giftID}});
|
||||
if (count === 0) return res.status(400).json({message: "Gift not found"});
|
||||
|
||||
// Add changes to object
|
||||
const updatedGift = {};
|
||||
if (req.body.articleID) {
|
||||
|
||||
// Check if article exists
|
||||
const {count: articleCount} = await Article.findAndCountAll({where: {articleID: req.body.articleID}});
|
||||
if (articleCount === 0) return res.status(400).json({message: "Article does not exist"});
|
||||
updatedGift["articleID"] = req.body.articleID;
|
||||
}
|
||||
if (req.body.expiry_date) updatedGift["expiry_date"] = req.body.expiry_date;
|
||||
if (req.body.item_expiry_date) updatedGift["item_expiry_date"] = req.body.item_expiry_date;
|
||||
|
||||
// Update
|
||||
await Gift.update(updatedGift, {where: {giftID: req.body.giftID}});
|
||||
|
||||
// Send response
|
||||
res.status(200).json({message: "Gift updated successfully"});
|
||||
});
|
||||
|
||||
app.post("/redeem", async (req, res) => {
|
||||
// Validate request
|
||||
const {error} = giftValidation.redeem.validate(req.body);
|
||||
if (error) return res.status(400).json({message: error.details[0].message});
|
||||
|
||||
// Check if code is in database
|
||||
const giftInfo = await Gift.findOne({where: {giftID: req.body.giftID}});
|
||||
|
||||
// Check if gift exists
|
||||
if (!giftInfo) return res.status(404).json({message: "Gift not found"});
|
||||
|
||||
// Get the article
|
||||
const article = await Article.findOne({where: {id: giftInfo.articleID}});
|
||||
|
||||
// Check if article limit reached
|
||||
const {count} = await ActivatedArticle.findAndCountAll({
|
||||
where: {
|
||||
articleID: giftInfo.articleID,
|
||||
guildID: req.body.guildID
|
||||
}
|
||||
});
|
||||
|
||||
if (count >= article.maxOwnCount) return res.status(400).json({message: "Maximum limit of this item reached"});
|
||||
|
||||
// Redeem article
|
||||
await ActivatedArticle.create({
|
||||
articleID: giftInfo.articleID,
|
||||
expiry_date: giftInfo.item_expiry_date,
|
||||
guildID: req.body.guildID
|
||||
});
|
||||
await Gift.destroy({where: {giftID: req.body.giftID}});
|
||||
|
||||
// Send response
|
||||
res.json({message: "Article successfully redeemed"});
|
||||
});
|
||||
|
||||
|
||||
module.exports = app;
|
Reference in New Issue
Block a user