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

75
decks/decks.controller.js Normal file
View File

@@ -0,0 +1,75 @@
const DeckModel = require('../decks/decks.model');
const Activity = require("../activity/activity.model");
const config = require('../config');
exports.AddDeck = async(req, res) =>
{
var tid = req.body.tid;
var title = req.body.title;
var hero = req.body.hero;
var cards = req.body.cards;
if(!tid || typeof tid !== "string")
return res.status(400).send({error: "Invalid parameters"});
if(!title || typeof title !== "string")
return res.status(400).send({error: "Invalid parameters"});
if(!hero || typeof hero !== "object")
return res.status(400).send({error: "Invalid parameters"});
if(cards && !Array.isArray(cards))
return res.status(400).send({error: "Invalid parameters"});
var deck_data = {
tid: tid,
title: title,
hero: hero,
cards: cards || [],
}
//Update or create
var deck = await DeckModel.get(tid);
if(deck)
deck = await DeckModel.update(deck, deck_data);
else
deck = await DeckModel.create(deck_data);
if(!deck)
res.status(500).send({error: "Error updating deck"});
return res.status(200).send(deck);
};
exports.DeleteDeck = async(req, res) => {
DeckModel.remove(req.params.tid);
return res.status(204).send({});
};
exports.DeleteAll = async(req, res) => {
DeckModel.removeAll();
return res.status(204).send({});
};
exports.GetDeck = async(req, res) =>
{
var deckId = req.params.tid;
if(!deckId)
return res.status(400).send({error: "Invalid parameters"});
var deck = await DeckModel.get(deckId);
if(!deck)
return res.status(404).send({error: "Deck not found: " + deckId});
return res.status(200).send(deck.toObj());
};
exports.GetAll = async(req, res) =>
{
var decks = await DeckModel.getAll();
return res.status(200).send(decks);
};

99
decks/decks.model.js Normal file
View File

@@ -0,0 +1,99 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const deckSchema = new Schema({
tid: { type: String, index: true, unique: true, default: "" },
title: { type: String, default: "" },
hero: {tid: String, variant: String, _id: false},
cards: [{tid: String, variant: String, quantity: Number, _id: false}],
});
deckSchema.methods.toObj = function() {
var deck = this.toObject();
delete deck.__v;
delete deck._id;
return deck;
};
const Deck = mongoose.model('Decks', deckSchema);
exports.get = async(deckId) => {
try{
var deck = await Deck.findOne({tid: deckId});
return deck;
}
catch{
return null;
}
};
exports.getList = async(decks_tids) => {
try{
var decks = await Deck.find({tid: { $in: decks_tids } });
return decks || [];
}
catch{
return [];
}
};
exports.getAll = async() => {
try{
var decks = await Deck.find()
return decks || [];
}
catch{
return [];
}
};
exports.create = async(data) => {
try{
var deck = new Deck(data);
return await deck.save();
}
catch{
return null;
}
};
exports.update = async(deck, data) => {
try{
if(!deck) return null;
for (let i in data) {
deck[i] = data[i];
deck.markModified(i);
}
var updated = await deck.save();
return updated;
}
catch{
return null;
}
};
exports.remove = async(deckId) => {
try{
var result = await Deck.deleteOne({tid: deckId});
return result && result.deletedCount > 0;
}
catch{
return false;
}
};
exports.removeAll = async() => {
try{
var result = await Deck.deleteMany({});
return result && result.deletedCount > 0;
}
catch{
return false;
}
};

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

@@ -0,0 +1,36 @@
const DeckController = require('./decks.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('/decks/:tid', [
DeckController.GetDeck
]);
app.get('/decks', [
DeckController.GetAll
]);
app.post('/decks/add', [
AuthTool.isValidJWT,
AuthTool.isPermissionLevel(ADMIN),
DeckController.AddDeck
]);
app.delete("/decks/:tid", [
AuthTool.isValidJWT,
AuthTool.isPermissionLevel(ADMIN),
DeckController.DeleteDeck
]);
app.delete("/decks", [
AuthTool.isValidJWT,
AuthTool.isPermissionLevel(ADMIN),
DeckController.DeleteAll
]);
};