init
This commit is contained in:
99
rewards/rewards.controller.js
Normal file
99
rewards/rewards.controller.js
Normal file
@@ -0,0 +1,99 @@
|
||||
const RewardModel = require('../rewards/rewards.model');
|
||||
const Activity = require("../activity/activity.model");
|
||||
const config = require('../config');
|
||||
|
||||
exports.AddReward = async(req, res) =>
|
||||
{
|
||||
var rewardId = req.body.tid;
|
||||
var group = req.body.group;
|
||||
var repeat = req.body.repeat;
|
||||
var xp = req.body.xp;
|
||||
var coins = req.body.coins;
|
||||
var cards = req.body.cards;
|
||||
var packs = req.body.packs;
|
||||
var decks = req.body.decks;
|
||||
var avatars = req.body.avatars;
|
||||
var cardbacks = req.body.cardbacks;
|
||||
|
||||
if(!rewardId || typeof rewardId !== "string")
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
|
||||
if(group && typeof group !== "string")
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
|
||||
if(xp && !Number.isInteger(xp))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
if(coins && !Number.isInteger(coins))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
if(cards && !Array.isArray(cards))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
if(packs && !Array.isArray(packs))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
if(decks && !Array.isArray(decks))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
if(avatars && !Array.isArray(avatars))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
if(cardbacks && !Array.isArray(cardbacks))
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
|
||||
var reward_data = {
|
||||
tid: rewardId,
|
||||
group: group || "",
|
||||
repeat: repeat || false,
|
||||
xp: xp || 0,
|
||||
coins: coins || 0,
|
||||
cards: cards || [],
|
||||
packs: packs || [],
|
||||
decks: decks || [],
|
||||
avatars: avatars || [],
|
||||
cardbacks: cardbacks || [],
|
||||
}
|
||||
|
||||
//Update or create
|
||||
var reward = await RewardModel.get(rewardId);
|
||||
if(reward)
|
||||
reward = await RewardModel.update(reward, reward_data);
|
||||
else
|
||||
reward = await RewardModel.create(reward_data);
|
||||
|
||||
if(!reward)
|
||||
res.status(500).send({error: "Error updating reward"});
|
||||
|
||||
//Activity
|
||||
const act = await Activity.LogActivity("reward_add", req.jwt.username, reward);
|
||||
if (!act) return res.status(500).send({ error: "Failed to log activity!" });
|
||||
|
||||
return res.status(200).send(reward);
|
||||
};
|
||||
|
||||
exports.DeleteReward = async(req, res) => {
|
||||
RewardModel.remove(req.params.tid);
|
||||
return res.status(204).send({});
|
||||
};
|
||||
|
||||
exports.DeleteAll = async(req, res) => {
|
||||
RewardModel.removeAll();
|
||||
return res.status(204).send({});
|
||||
};
|
||||
|
||||
exports.GetReward = async(req, res) =>
|
||||
{
|
||||
var rewardTid = req.params.tid;
|
||||
|
||||
if(!rewardTid)
|
||||
return res.status(400).send({error: "Invalid parameters"});
|
||||
|
||||
var reward = await RewardModel.get(rewardTid);
|
||||
if(!reward)
|
||||
return res.status(404).send({error: "Reward not found: " + rewardTid});
|
||||
|
||||
return res.status(200).send(reward.toObj());
|
||||
};
|
||||
|
||||
exports.GetAll = async(req, res) =>
|
||||
{
|
||||
var rewards = await RewardModel.getAll();
|
||||
return res.status(200).send(rewards);
|
||||
};
|
||||
|
||||
|
||||
107
rewards/rewards.model.js
Normal file
107
rewards/rewards.model.js
Normal file
@@ -0,0 +1,107 @@
|
||||
const mongoose = require('mongoose');
|
||||
const Schema = mongoose.Schema;
|
||||
|
||||
const rewardSchema = new Schema({
|
||||
|
||||
tid: { type: String, index: true, unique: true, default: "" },
|
||||
group: { type: String, index: true, default: "" },
|
||||
repeat: { type : Boolean, default: false }, //If true, can be gained multiple times but only server/admin can grant it
|
||||
|
||||
xp: { type: Number, default: 0 },
|
||||
coins: { type: Number, default: 0 },
|
||||
cards: [{type: String}],
|
||||
packs: [{type: String}],
|
||||
decks: [{type: String}],
|
||||
avatars: [{type: String}],
|
||||
cardbacks: [{type: String}],
|
||||
|
||||
});
|
||||
|
||||
rewardSchema.methods.toObj = function() {
|
||||
var reward = this.toObject();
|
||||
delete reward.__v;
|
||||
delete reward._id;
|
||||
return reward;
|
||||
};
|
||||
|
||||
const Reward = mongoose.model('Rewards', rewardSchema);
|
||||
|
||||
exports.get = async(rewardId) => {
|
||||
try{
|
||||
var reward = await Reward.findOne({tid: rewardId});
|
||||
return reward;
|
||||
}
|
||||
catch{
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
exports.getGroup = async(group) => {
|
||||
|
||||
try{
|
||||
var rewards = await Reward.find({group: group})
|
||||
return rewards || [];
|
||||
}
|
||||
catch{
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
exports.getAll = async() => {
|
||||
|
||||
try{
|
||||
var rewards = await Reward.find()
|
||||
return rewards || [];
|
||||
}
|
||||
catch{
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
exports.create = async(data) => {
|
||||
try{
|
||||
var reward = new Reward(data);
|
||||
return await reward.save();
|
||||
}
|
||||
catch{
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
exports.update = async(reward, data) => {
|
||||
|
||||
try{
|
||||
if(!reward) return null;
|
||||
|
||||
for (let i in data) {
|
||||
reward[i] = data[i];
|
||||
reward.markModified(i);
|
||||
}
|
||||
|
||||
var updated = await reward.save();
|
||||
return updated;
|
||||
}
|
||||
catch{
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
exports.remove = async(rewardId) => {
|
||||
try{
|
||||
var result = await Reward.deleteOne({tid: rewardId});
|
||||
return result && result.deletedCount > 0;
|
||||
}
|
||||
catch{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
exports.removeAll = async() => {
|
||||
try{
|
||||
var result = await Reward.deleteMany({});
|
||||
return result && result.deletedCount > 0;
|
||||
}
|
||||
catch{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
40
rewards/rewards.routes.js
Normal file
40
rewards/rewards.routes.js
Normal file
@@ -0,0 +1,40 @@
|
||||
const RewardController = require('./rewards.controller');
|
||||
const AuthTool = require('../authorization/auth.tool');
|
||||
const config = require('../config');
|
||||
|
||||
const ADMIN = config.permissions.ADMIN; //Highest permision, can read and write all users
|
||||
const SERVER = config.permissions.SERVER; //Higher permission, can read all users
|
||||
const USER = config.permissions.USER; //Lowest permision, can only do things on same user
|
||||
|
||||
exports.route = function (app) {
|
||||
|
||||
app.get('/rewards/:tid', [
|
||||
AuthTool.isValidJWT,
|
||||
AuthTool.isPermissionLevel(USER),
|
||||
RewardController.GetReward
|
||||
]);
|
||||
|
||||
app.get('/rewards', [
|
||||
AuthTool.isValidJWT,
|
||||
AuthTool.isPermissionLevel(SERVER),
|
||||
RewardController.GetAll
|
||||
]);
|
||||
|
||||
app.post('/rewards/add', [
|
||||
AuthTool.isValidJWT,
|
||||
AuthTool.isPermissionLevel(ADMIN),
|
||||
RewardController.AddReward
|
||||
]);
|
||||
|
||||
app.delete("/rewards/:tid", [
|
||||
AuthTool.isValidJWT,
|
||||
AuthTool.isPermissionLevel(ADMIN),
|
||||
RewardController.DeleteReward
|
||||
]);
|
||||
|
||||
app.delete("/rewards", [
|
||||
AuthTool.isValidJWT,
|
||||
AuthTool.isPermissionLevel(ADMIN),
|
||||
RewardController.DeleteAll
|
||||
]);
|
||||
};
|
||||
Reference in New Issue
Block a user