diff --git a/public/js/main.js b/public/js/main.js index d42b87e..f7ae488 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -4,3 +4,10 @@ $(document).ready(function(){ $(this).tab('show'); }); }); + +$(document).ready(function(){ + $("#market a").click(function(e){ + e.preventDefault(); + $(this).tab('show'); + }); +}); diff --git a/routes/marketplace.js b/routes/marketplace.js index 0ca0679..93b887a 100644 --- a/routes/marketplace.js +++ b/routes/marketplace.js @@ -10,7 +10,8 @@ const {ensureAuthenticated} = require("../config/auth.js") mongoose.connect(process.env.MONGO,{ useNewUrlParser: true, - useUnifiedTopology: true + useUnifiedTopology: true, + useFindAndModify: true, }); let db = mongoose.connection; @@ -27,7 +28,7 @@ db.on('error', function(err){ 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); @@ -47,13 +48,22 @@ router.get('/', function(req, res) { admin: req.session.admin, }); } - - }) }); -router.get('/listings', ensureAuthenticated, function(req,res){ - res.render('listings') + + +router.get('/marketdash', ensureAuthenticated, function(req,res){ + Inventory.findOne({user:req.session.user}, function(err, inventory){ + res.render('marketdash',{ + user:req.session.user, + admin:req.session.admin, + inventory:inventory, + }) + }) + + }) + router.get('/:id',function(req, res){ Item.findById(req.params.id, function(err, item){ Listing.find({foreignid: req.params.id}, function(err, listings){ @@ -72,34 +82,32 @@ router.get('/:id',function(req, res){ router.get('/:id/list',ensureAuthenticated, function(req,res){ Item.findById(req.params.id, function(err, item){ - Listing.find({foreignid: req.params.id}, function(err, listing){ - console.log(listing) - - - res.render('itemlist', { - user:req.session.user, - admin:req.session.admin, - item:item, - }); - }) + res.render('itemlist', { + user:req.session.user, + admin:req.session.admin, + item:item, + }); }); }) router.get('/:id/buy',ensureAuthenticated, function(req,res){ - Item.findById(req.params.id, function(err, item){ - Listing.find({foreignid: req.params.id}, function(err, listings){ - console.log(listings) + 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, - item:item, - }); - }) + res.render('itembuy', { + listings:listings, + user:req.session.user, + admin:req.session.admin, + }); }); }) -router.post('/:id/list',ensureAuthenticated, function(req,res){ + + + + + + +router.post('/:id/list',ensureAuthenticated, async function(req,res){ let body = req.body let item = JSON.parse(req.body.item) console.log(item) @@ -119,18 +127,63 @@ router.post('/:id/list',ensureAuthenticated, function(req,res){ console.log("added "+ listing.name+" from "+listing.seller) } }) - res.redirect('/marketplace/listings') + 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',function(req, res){ - Listing.find({_id: req.params.id}, function(err, listings){ - console.log(listings) +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.render('item', { - listings: listings, - user:req.session.user, - admin:req.session.admin, - }); + res.redirect("/marketplace/marketdash") }) }) diff --git a/schemas/inventory.js b/schemas/inventory.js new file mode 100644 index 0000000..7856b01 --- /dev/null +++ b/schemas/inventory.js @@ -0,0 +1,72 @@ +const mongoose = require('mongoose'); +const Listing = require("./listing.js") + + +const InventorySchema = mongoose.Schema({ + user:{ + type: String, + required: true, + }, + listings:[{ + itemId:{ + type: Number, + required: true, + }, + meta:{ + type: Number, + required: false + }, + name:{ + type: String, + required: true + }, + foreignid:{ + type: String, + required: true, + }, + price:{ + type:Number, + required: true + }, + amount:{ + type: Number, + required:true + }, + seller:{ + type:String, + required:true, + } + }], + purchases:[{ + itemId:{ + type: Number, + required: true, + }, + meta:{ + type: Number, + required: false + }, + name:{ + type: String, + required: true + }, + foreignid:{ + type: String, + required: true, + }, + price:{ + type:Number, + required: true + }, + amount:{ + type: Number, + required:true + }, + seller:{ + type:String, + required:true, + } + }], +}) + +const Inventory = module.exports = mongoose.model('Inventory', InventorySchema); diff --git a/views/itembuy.pug b/views/itembuy.pug index 27c4548..bb92eba 100644 --- a/views/itembuy.pug +++ b/views/itembuy.pug @@ -6,15 +6,15 @@ block content .row .col .card - img(src="/blockimages/items/"+item.itemId+"-"+item.meta+".png") + img(src="/blockimages/items/"+listings[0].itemId+"-"+listings[0].meta+".png") .col .row .col-sm-2 p Item: p ID: .col-sm-4 - p #{item.name} - p #{item.itemId}-#{item.meta} + p #{listings[0].name} + p #{listings[0].itemId}-#{listings[0].meta} .col h4 Buy .row diff --git a/views/itemlist.pug b/views/itemlist.pug index 814d448..51d6577 100644 --- a/views/itemlist.pug +++ b/views/itemlist.pug @@ -13,7 +13,7 @@ block content .col-sm-2 p Item: p ID: - .col-sm-4 + .col-sm-2 p #{item.name} p #{item.itemId}-#{item.meta} .col diff --git a/views/marketdash.pug b/views/marketdash.pug new file mode 100644 index 0000000..3237dc1 --- /dev/null +++ b/views/marketdash.pug @@ -0,0 +1,63 @@ +extends layout + +block content + .container + h2 Welcome to the marketplace dashboard #{inventory.user} + .card + ul#market.nav.nav-tabs.card-header-tabs(role='tablist') + li.nav-item + a.nav-link.active.text-black(href='#purchases', role='tab', aria-controls='purchases', aria-selected='true') Purchases + li.nav-item + a.nav-link.text-black(href='#selling', role='tab', aria-controls='selling', aria-selected='false') Selling + .tab-content.mt-3 + #purchases.tab-pane.active(role='tabpanel' aria-labelledby='purchases-tab') + .row + .col + p itemID + .col + p Item Name + .col + p Price + .col + p Amount + .col + p Seller + + for i in inventory.purchases + .row + .col + p #{i.itemId}-#{i.meta} + .col + p #{i.name} + .col + p #{i.price} + .col + p #{i.amount} + .col + p #{i.seller} + #selling.tab-pane(role='tabpanel', aria-labelledby='selling-tab') + .row + .col + p itemID + .col + p Item Name + .col + p Price + .col + p Amount + .col + p Seller + + for i in inventory.listings + .row + .col + p #{i.itemId}-#{i.meta} + .col + p #{i.name} + .col + p #{i.price} + .col + p #{i.amount} + .col + p #{i.seller} +