diff --git a/index.js b/index.js index 4875268..35bafbe 100644 --- a/index.js +++ b/index.js @@ -153,7 +153,7 @@ app.get('/BankF', ensureAuthenticated, async function(req, res){ console.log(logrec.timings) console.log("query finished "+Date.now()) logsent = logsent.body.value - if(logsent == 1 || logsent == -1 || logrec == null){ + if(logsent == 1 || logsent == -1 || logsent == null){ logsent = undefined }else{ logsent = logsent.filter(({ from }) => from === req.session.user) diff --git a/routes/marketplace.js b/routes/marketplace.js index 36c037d..0ca0679 100644 --- a/routes/marketplace.js +++ b/routes/marketplace.js @@ -5,6 +5,7 @@ const session = require('express-session'); const mongoose = require('mongoose') const dotenv = require('dotenv'); const got = require('got'); +const {ensureAuthenticated} = require("../config/auth.js") mongoose.connect(process.env.MONGO,{ @@ -25,6 +26,8 @@ db.on('error', function(err){ }); let Item = require('../schemas/item') +let Listing = require('../schemas/listing') + router.all('*', function(req, res, next) { console.log(req.method, req.url); @@ -48,21 +51,88 @@ router.get('/', function(req, res) { }) }); - -router.get('/:id',function(req, res, next){ +router.get('/listings', ensureAuthenticated, function(req,res){ + res.render('listings') +}) +router.get('/:id',function(req, res){ Item.findById(req.params.id, function(err, item){ - res.render('item', { - user:req.session.user, - admin:req.session.admin, - item: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, + }); + }) }); - - }) +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, + }); + }) + }); +}) +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) + + + res.render('itembuy', { + listings:listings, + user:req.session.user, + admin:req.session.admin, + item:item, + }); + }) + }); +}) +router.post('/:id/list',ensureAuthenticated, 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) + } + }) + res.redirect('/marketplace/listings') +}) +router.post('/:id',function(req, res){ + Listing.find({_id: req.params.id}, function(err, listings){ + console.log(listings) + + + res.render('item', { + listings: listings, + user:req.session.user, + admin:req.session.admin, + }); + }) +}) // 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){ diff --git a/schemas/listing.js b/schemas/listing.js new file mode 100644 index 0000000..d030fd8 --- /dev/null +++ b/schemas/listing.js @@ -0,0 +1,35 @@ +const mongoose = require('mongoose'); + + +const ListingSchema = mongoose.Schema({ + 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 Listing = module.exports = mongoose.model('Listing', ListingSchema); diff --git a/views/item.pug b/views/item.pug index f1521b6..68c8ff5 100644 --- a/views/item.pug +++ b/views/item.pug @@ -1,5 +1,31 @@ extends marketlayout block content - p #{item} - + .container + .card + .row + .col + .card + img(src="/blockimages/items/"+item.itemId+"-"+item.meta+".png") + .col + .row + .col-sm-2 + p Item: + p ID: + .col-sm-4 + p #{item.name} + p #{item.itemId}-#{item.meta} + .col + h4 Buy + .col + h4 Sell + .row + .col-sm-2 + + .col-sm-4 + + .col + a.btn.btn-primary(href="/marketplace/"+item._id+"/buy") Buy + .col + a.btn.btn-primary(href="/marketplace/"+item._id+"/list") List + diff --git a/views/itembuy.pug b/views/itembuy.pug new file mode 100644 index 0000000..27c4548 --- /dev/null +++ b/views/itembuy.pug @@ -0,0 +1,41 @@ +extends marketlayout + +block content + .container + .card + .row + .col + .card + img(src="/blockimages/items/"+item.itemId+"-"+item.meta+".png") + .col + .row + .col-sm-2 + p Item: + p ID: + .col-sm-4 + p #{item.name} + p #{item.itemId}-#{item.meta} + .col + h4 Buy + .row + .col + p Seller + .col + p Price + .col + p Amount + .col + p Link + for i in listings + .row + .col + p #{i.seller} + .col + p #{i.price} + .col + p #{i.amount} + .col + form(method='POST', action='/marketplace/'+i._id+"/buy") + input(type="hidden" value=i name="listing") + input.btn.btn-primary.btn-sm(type='submit', value='Buy') + diff --git a/views/itemlist.pug b/views/itemlist.pug new file mode 100644 index 0000000..814d448 --- /dev/null +++ b/views/itemlist.pug @@ -0,0 +1,32 @@ +extends marketlayout + + +block content + .container + .card + .row + .col + .card + img(src="/blockimages/items/"+item.itemId+"-"+item.meta+".png") + .col + .row + .col-sm-2 + p Item: + p ID: + .col-sm-4 + p #{item.name} + p #{item.itemId}-#{item.meta} + .col + h4 Sell + form(method='POST', action='/marketplace/'+item._id+'/list') + label Selling Price: + br + input.form-control-lg.shadow(type="number" min="0" name="price") + br + br + label Amount: + input.form-control-lg.shadow(type="number" min="0" name="amount") + br + br + input(type="hidden" value=item name="item") + input.btn.btn-primary(type='submit', value='Submit') diff --git a/views/layout.pug b/views/layout.pug index b4f2904..4f42b2b 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -11,7 +11,7 @@ html nav.navbar.navbar-expand-lg.navbar-light.navbarrr.shadow-lg .container a.navbar-brand(href='/') - img(src="../CCashLogo3.png" style="width:75px; height:74px") + img(src="/CCashLogo3.png" style="width:75px; height:74px") button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbars', aria-controls='navbars', aria-expanded='false', aria-label='Toggle navigation') span.navbar-toggler-icon #navbars.collapse.navbar-collapse diff --git a/views/listings.pug b/views/listings.pug new file mode 100644 index 0000000..5fc1b4e --- /dev/null +++ b/views/listings.pug @@ -0,0 +1,4 @@ +extends marketlayout + +block content + diff --git a/views/marketlayout.pug b/views/marketlayout.pug index b4f2904..4f42b2b 100644 --- a/views/marketlayout.pug +++ b/views/marketlayout.pug @@ -11,7 +11,7 @@ html nav.navbar.navbar-expand-lg.navbar-light.navbarrr.shadow-lg .container a.navbar-brand(href='/') - img(src="../CCashLogo3.png" style="width:75px; height:74px") + img(src="/CCashLogo3.png" style="width:75px; height:74px") button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbars', aria-controls='navbars', aria-expanded='false', aria-label='Toggle navigation') span.navbar-toggler-icon #navbars.collapse.navbar-collapse