Files
tcg-server/market/market.model.js
yaoyanwei 4b2bb35c20 init
2025-08-04 16:25:38 +08:00

147 lines
3.2 KiB
JavaScript

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const marketSchema = new Schema({
seller: {type: String, index: true},
card: {type: String, index: true},
variant: {type: String},
quantity: {type: Number},
price: {type: Number},
time: {type: Date},
});
marketSchema.methods.toObj = function() {
var offer = this.toObject();
delete offer.__v;
delete offer._id;
return offer;
};
const Market = mongoose.model('Markets', marketSchema);
// Market DATA MODELS ------------------------------------------------
exports.getOffer = async(user, card_tid, variant_id) => {
try{
var regex = new RegExp(["^", user, "$"].join(""), "i");
var offer = await Market.findOne({seller: regex, card: card_tid, variant: variant_id});
return offer;
}
catch{
return null;
}
};
exports.getBySeller = async(user) => {
try{
var regex = new RegExp(["^", user, "$"].join(""), "i");
var offers = await Market.find({seller: regex});
offers = offers || [];
return offers;
}
catch{
return [];
}
};
exports.getByCard = async(card_tid, variant_id) => {
try{
var offers = await Market.find({card: card_tid, variant: variant_id});
offers = offers || [];
return offers;
}
catch{
return [];
}
};
exports.getAll = async() => {
try{
var offers = await Market.find()
offers = offers || [];
return offers;
}
catch{
return [];
}
};
exports.getAllLimit = async(perPage, page) => {
try{
var offers = await Market.find().limit(perPage).skip(perPage * page)
offers = offers || [];
return offers;
}
catch{
return [];
}
};
exports.add = async(user, card, variant, data) => {
try{
var offer = await Market.findOne({seller: user, card: card, variant: variant});
if(!offer)
{
offer = new Market(data);
offer.date = Date.now();
return await offer.save();
}
else
{
offer.quantity += data.quantity;
offer.price = data.price;
offer.date = Date.now();
var updated = await offer.save();
return updated;
}
}
catch{
return null;
}
};
exports.reduce = async(user, card, variant, quantity) => {
try{
var offer = await Market.findOne({seller: user, card: card, variant: variant});
if(offer)
{
offer.quantity -= quantity;
if(offer.quantity > 0)
{
var updated = await offer.save();
return updated;
}
else{
var result = await Market.deleteOne({seller: user, card: card});
return result && result.deletedCount > 0;
}
}
}
catch{
return null;
}
};
exports.remove = async(user, card, variant) => {
try{
var result = await Market.deleteOne({seller: user, card: card, variant: variant});
return result && result.deletedCount > 0;
}
catch{
return false;
}
};