147 lines
3.2 KiB
JavaScript
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;
|
|
}
|
|
};
|