ccashfrontend/routes/marketplace.js
2021-05-03 21:16:09 +10:00

241 lines
5.7 KiB
JavaScript

const express = require('express')
const router = express.Router()
const bodyParser = require('body-parser')
const session = require('express-session');
const mongoose = require('mongoose')
const dotenv = require('dotenv');
const got = require('got');
const {ensureAuthenticated} = require("../config/auth.js")
let db
function mongo(){
if(process.env.MONGO){
console.log(process.env.MONGO)
mongoose.connect(process.env.MONGO,{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: true,
});
let db = mongoose.connection;
db.once('open', function(){
console.log('Connected to MongoDB');
})
//check for DB errors
db.on('error', function(err){
console.log(err);
});
}
}
mongo()
let Item = require('../schemas/item')
let Listing = require('../schemas/listing')
let Inventory = require('../schemas/inventory')
router.all('*', function(req, res, next) {
console.log(req.method, req.url);
next();
});
router.get('/', function(req, res) {
let columns = [0,1,2,3]
Item.find({}, function(err, items){
if(err){
console.log(err);
} else {
res.render('marketplace', {
columns:columns,
items: items,
user: req.session.user,
admin: req.session.admin,
marketplace: process.env.MARKETPLACE
});
}
})
});
router.get('/marketdash', ensureAuthenticated, function(req,res){
Inventory.findOne({user:req.session.user}, async function(err, inventory){
if(!inventory){
let newinv = new Inventory;
newinv.user = req.session.user
newinv.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("created new inventory for "+req.session.user)
}
})
}
setTimeout(500);
res.render('marketdash',{
user:req.session.user,
admin:req.session.admin,
inventory:inventory,
marketplace: process.env.MARKETPLACE
})
})
})
router.get('/:id',function(req, res){
Item.findById(req.params.id, function(err, item){
Listing.find({foreignid: req.params.id}, function(err, listings){
console.log(listings)
res.render('item', {
listings: listings,
user:req.session.user,
admin:req.session.admin,
item:item,
marketplace: process.env.MARKETPLACE
});
})
});
})
router.get('/:id/list',ensureAuthenticated, function(req,res){
Item.findById(req.params.id, function(err, item){
res.render('itemlist', {
user:req.session.user,
admin:req.session.admin,
item:item,
marketplace: process.env.MARKETPLACE
});
});
})
router.get('/:id/buy',ensureAuthenticated, function(req,res){
Listing.find({foreignid: req.params.id}, function(err, listings){
console.log(listings)
res.render('itembuy', {
listings:listings,
user:req.session.user,
admin:req.session.admin,
marketplace: process.env.MARKETPLACE
});
});
})
router.post('/:id/list',ensureAuthenticated, async function(req,res){
let body = req.body
let item = JSON.parse(req.body.item)
console.log(item)
let listing = new Listing();
listing.itemId = item.itemId
listing.meta = item.meta
listing.name = item.name
listing.foreignid = item._id
listing.price = body.price
listing.amount = body.amount
listing.seller = req.session.user
listing.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("added "+ listing.name+" from "+listing.seller)
}
})
let inventory = await Inventory.findOne({user:req.session.user}).exec()
if( inventory == null){
let newinv = new Inventory;
newinv.user = req.session.user
newinv.listings = listing;
newinv.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("created new inventory for "+req.session.user)
}
})
} else {
inventory.listings.push(listing)
inventory.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("pushed new listing")
}
})
}
res.redirect('/marketplace/marketdash')
})
router.post('/:id/buy',async function(req, res){
Listing.findOne({_id: req.params.id}, async function(err, listing){
console.log(await Inventory.findOne({user:req.session.user}).exec())
let inventory = await Inventory.findOne({user:req.session.user}).exec()
if(inventory == null){
let newinv = new Inventory;
newinv.user = req.session.user
newinv.purchases = listing;
newinv.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("created new inventory for "+req.session.user)
}
})
} else {
inventory.purchases.push(listing)
inventory.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("pushed new purchase")
}
})
}
Listing.findOneAndRemove({_id:req.params.id}).exec()
res.redirect("/marketplace/marketdash")
})
})
// this thingy here populates the database with minecraft items only use once otherwise you are gonna flood your database
/*router.get('/populatedb', async function(req,res){
let response = await got('http://minecraft-ids.grahamedgecombe.com/items.json')
let json = JSON.parse(response.body)
console.log(json[1].name)
for(i in json){
let item = new Item();
item.name = json[i].name
item.meta = json[i].meta
item.itemId = json[i].type
item.text_type = json[i].text_type
item.save(function(err){
if(err){
console.log(err);
return;
} else{
console.log("added "+ json[i].name)
}
})
}
})*/
module.exports = router