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) } }) } 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){ 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() transfer = got.post(process.env.BANKAPIURL+'BankF/sendfunds',{ json:{ a_name: req.session.user, b_name: listing.seller, amount: parseInt(listing.amount*listing.price), attempt: req.session.password }, responseType:'json' }) 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