This commit is contained in:
yaoyanwei
2025-08-04 16:25:38 +08:00
parent 8d542ea201
commit 4b2bb35c20
46 changed files with 5128 additions and 0 deletions

80
packs/packs.controller.js Normal file
View File

@@ -0,0 +1,80 @@
const PackModel = require("./packs.model");
exports.AddPack = async(req, res) =>
{
var tid = req.body.tid;
var cards = req.body.cards || 1;
var cost = req.body.cost || 1;
var random = req.body.random || false;
var rarities_1st = req.body.rarities_1st || [];
var rarities = req.body.rarities || [];
var variants = req.body.variants || [];
if(!tid || typeof tid !== "string")
return res.status(400).send({error: "Invalid parameters"});
if(!Number.isInteger(cards) || !Number.isInteger(cost))
return res.status(400).send({ error: "Invalid parameters" });
if(!Array.isArray(rarities_1st) || !Array.isArray(rarities) || !Array.isArray(variants))
return res.status(400).send({error: "Invalid parameters"});
var data = {
tid: tid,
cards: cards,
cost: cost,
random: random,
rarities_1st: rarities_1st,
rarities: rarities,
variants: variants,
}
//Update or create
var pack = await PackModel.get(tid);
if(pack)
pack = await PackModel.update(pack, data);
else
pack = await PackModel.create(data);
if(!pack)
return res.status(500).send({error: "Error updating pack"});
return res.status(200).send(data);
};
exports.DeletePack = async(req, res) =>
{
PackModel.remove(req.params.tid);
return res.status(204).send({});
};
exports.DeleteAll = async(req, res) =>
{
PackModel.removeAll();
return res.status(204).send({});
};
exports.GetPack = async(req, res) =>
{
var tid = req.params.tid;
if(!tid)
return res.status(400).send({error: "Invalid parameters"});
var pack = await PackModel.get(tid);
if(!pack)
return res.status(404).send({error: "Pack not found: " + tid});
return res.status(200).send(pack.toObj());
};
exports.GetAll = async(req, res) =>
{
var packs = await PackModel.getAll();
for(var i=0; i<packs.length; i++){
packs[i] = packs[i].toObj();
}
return res.status(200).send(packs);
};

96
packs/packs.model.js Normal file
View File

@@ -0,0 +1,96 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const packsSchema = new Schema({
tid: { type: String, index: true, unique: true },
cards: {type: Number, default: 1}, //Number of cards per pack
cost: {type: Number, default: 0}, //Cost in coins
random: {type: Boolean, default: true},
rarities: [{type: Object}], //Probabilities to get each rarities
rarities_1st: [{type: Object}], //Probabilities but for the first card only
variants: [{type: Object}], //Probabilities of variants
});
packsSchema.methods.toObj = function() {
var elem = this.toObject();
delete elem.__v;
delete elem._id;
return elem;
};
const Pack = mongoose.model("Packs", packsSchema);
exports.Pack = Pack;
exports.create = async(data) => {
try{
var pack = new Pack(data);
return await pack.save();
}
catch{
return null;
}
};
exports.get = async(set_tid) => {
try{
var pack = await Pack.findOne({tid: set_tid});
return pack;
}
catch{
return null;
}
};
exports.getAll = async() => {
try{
var packs = await Pack.find({});
return packs;
}
catch{
return [];
}
};
exports.update = async(pack, data) => {
try{
if(!pack) return null;
for (let i in data) {
pack[i] = data[i];
pack.markModified(i);
}
var updated = await pack.save();
return updated;
}
catch{
return null;
}
};
exports.remove = async(pack_tid) => {
try{
var result = await Pack.deleteOne({tid: pack_tid});
return result && result.deletedCount > 0;
}
catch{
return false;
}
};
exports.removeAll = async() => {
try{
var result = await Pack.deleteMany({});
return result && result.deletedCount > 0;
}
catch{
return false;
}
};

36
packs/packs.routes.js Normal file
View File

@@ -0,0 +1,36 @@
const config = require("../config");
const PacksController = require("./packs.controller");
const AuthTool = require("../authorization/auth.tool");
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 = (app) => {
app.get("/packs", [
PacksController.GetAll
]);
app.get("/packs/:tid", [
PacksController.GetPack
]);
app.post("/packs/add", [
AuthTool.isValidJWT,
AuthTool.isPermissionLevel(ADMIN),
PacksController.AddPack
]);
app.delete("/packs/:tid", [
AuthTool.isValidJWT,
AuthTool.isPermissionLevel(ADMIN),
PacksController.DeletePack
]);
app.delete("/packs", [
AuthTool.isValidJWT,
AuthTool.isPermissionLevel(ADMIN),
PacksController.DeleteAll
]);
};