ccashfrontend/routes/marketplace.js
2021-05-09 10:29:13 +10:00

234 lines
6.1 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);
}
});
}
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;