You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sigcrafting_backend/server.js

160 lines
335 KiB

const express = require('express')
const axios = require('axios')
var http = require('http');
var https = require('https');
const fs = require('fs');
const sh = require('secrethash');
var key = fs.readFileSync('./projectdivar.com/privkey1.pem');
var cert = fs.readFileSync('./projectdivar.com/cert1.pem');
var options = {
key: key,
cert: cert
};
const app = express()
var server = https.createServer(options, app);
const port = 4505
server.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
const bodyParser = require('body-parser')
const { json } = require('body-parser')
const moment = require('moment');
const Pool = require('pg').Pool
app.use(bodyParser.json())
app.use(
bodyParser.urlencoded({
extended: true,
})
)
let allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Headers', "*");
res.header('Access-Control-Allow-Methods', "*");
next();
}
app.use(allowCrossDomain);
var db =
new Pool({
user: 'postgres',
password: '',
host: 'postgres',
database: 'sigcrafting',
port: 5432,
})
app.get('/',async(req,res)=>{
res.status(200).send('BUN is love, BUN is life.')
})
app.get('/getData',(req,res)=>{
db.query('select * from crafting_list order by id asc')
.then((data)=>{
if (data.rows.length>0) {
res.status(200).json(data.rows)
} else {
res.status(204).send("No data")
}
})
.catch((err)=>{
res.status(500).send(err.message)
})
})
app.get('/getNotifications',(req,res)=>{
db.query('select * from audit_log where date>$1 order by id asc limit 10',[req.query.date])
.then((data)=>{
res.status(200).json(data.rows)
})
.catch((err)=>{
console.log(err)
res.status(500).send(err.message)
})
})
app.get('/lastUpdate',(req,res)=>{
db.query("select * from site_data limit 1")
.then((data)=>{
res.status(200).json(data.rows)
})
.catch((err)=>{
res.status(500).send(err.message)
})
})
app.post("/updateItem",(req,res)=>{
var itemIcon=""
db.query("update crafting_list set obtained=$1 where id=$2 returning *",[req.body.obtained,req.body.id])
.then((data)=>{
itemIcon = "https://xivapi.com"+data.rows[0].icon
return db.query("update site_data set last_modified=$1",[req.body.last_modified])
})
.then((data)=>{
return axios.post(process.env.DISCORD_WEBHOOK,{embeds:[{
author:{
name:req.body.item_name,
icon_url:itemIcon
},
description:"**"+req.body.username+"** "+(req.body.operation==="FINISH"?" has finished collecting "+req.body.required+"/"+req.body.required+" __"+req.body.item_name+"__!":
req.body.operation==="INCREASE"?" has collected "+req.body.obtained+"/"+req.body.required+" __"+req.body.item_name+"__ (+"+(req.body.obtained-req.body.previous_amt)+")"
:" has set __"+req.body.item_name+"__ to "+req.body.obtained+"/"+req.body.required)+"\n\n[Sig Planner - Sig crafts all the things](http://projectdivar.com:3001)"
}]
})})
.then((data)=>{
return db.query("insert into audit_log(username,obtained,required,item_name,operation,date,previous_amt) values($1,$2,$3,$4,$5,$6,$7)",[req.body.username,req.body.obtained,req.body.required,req.body.item_name,req.body.operation,req.body.last_modified,req.body.previous_amt])
})
.then((data)=>{
res.status(200).send("Yay!")
})
.catch((err)=>{
console.log(err.message)
res.status(500).send(err.message)
})
})
app.post('/setItem',(req,res)=>{
db.query('insert into crafting_list(itemid,name,obtained,required,icon) values($1,$2,$3,$4,$5)',[req.body.itemid,req.body.name,req.body.obtained,req.body.required,req.body.icon])
.then((data)=>{
res.status(200).send("Yay!")
})
.catch((err)=>{
res.status(500).send(err.message)
})
})
const myInv = [{"itemId":5390,"containerId":1,"slot":0,"quantity":167,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":6459,"containerId":0,"slot":0,"quantity":1,"hq":false,"spiritBond":1,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":6456,"containerId":0,"slot":1,"quantity":1,"hq":false,"spiritBond":1,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":9518,"containerId":1,"slot":1,"quantity":1,"hq":true,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":6405,"containerId":0,"slot":2,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":9519,"containerId":1,"slot":2,"quantity":4,"hq":true,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5388,"containerId":0,"slot":3,"quantity":2,"hq":true,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5491,"containerId":1,"slot":3,"quantity":2,"hq":true,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5388,"containerId":0,"slot":4,"quantity":53,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5525,"containerId":1,"slot":4,"quantity":3,"hq":true,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":6419,"containerId":3,"slot":4,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":11150,"containerId":1,"slot":5,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":11195,"containerId":0,"slot":5,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":11152,"containerId":1,"slot":6,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":11171,"containerId":0,"slot":6,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":11160,"containerId":0,"slot":7,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":11162,"containerId":1,"slot":7,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":4751,"containerId":0,"slot":8,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5805,"containerId":1,"slot":8,"quantity":7,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":4830,"containerId":0,"slot":9,"quantity":1,"hq":true,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5813,"containerId":1,"slot":9,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5306,"containerId":0,"slot":10,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5812,"containerId":1,"slot":10,"quantity":5,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"price":0},{"itemId":5263,"containerId":0,"slot":11,"quantity":1,"hq":false,"spiritBond":0,"materias":[0,0,0,0,0],"contentId":"0040002E9305F744","isCurrentCharacter":true,"pric
var runInventoryScan = async()=>{
for (var item of myInv) {
const it = item
await db.query('select * from crafting_list where itemid=$1',[item.itemId])
.then(async(data)=>{
for (var row of data.rows) {
if (row.required-row.obtained<=it.quantity) {
await db.query('update crafting_list set obtained=$1 where itemid=$2',[row.required,it.itemId])
.catch((err)=>{
console.log(err.message)
})
} else {
await db.query('update crafting_list set obtained=$1 where itemid=$2',[row.obtained+it.quantity,it.itemId])
.catch((err)=>{
console.log(err.message)
})
break;
}
}
})
.catch((err)=>{
console.log(err.message)
})
}
}
//runInventoryScan()
//console.log(process.env.DISCORD_WEBHOOK)