Merge changes
This commit is contained in:
commit
7a386fd09e
@ -8,5 +8,8 @@ alter table potential_data add column description text;
|
|||||||
alter table photon_art add column icon text;
|
alter table photon_art add column icon text;
|
||||||
alter table users add column recovery_hash text;
|
alter table users add column recovery_hash text;
|
||||||
alter table armor rename column pb_gauge_build to slot;
|
alter table armor rename column pb_gauge_build to slot;
|
||||||
|
alter table armor add column battle_power_value text;
|
||||||
CREATE TABLE "skill_tree_data"("id" SERIAL UNIQUE PRIMARY KEY,"class_id" int,"data" text,"skill_data" text,"line_color" text,"line_width" int,"gridsizex" int,"gridsizey" int,"gridpaddingx" int,"gridpaddingy" int);
|
CREATE TABLE "skill_tree_data"("id" SERIAL UNIQUE PRIMARY KEY,"class_id" int,"data" text,"skill_data" text,"line_color" text,"line_width" int,"gridsizex" int,"gridsizey" int,"gridpaddingx" int,"gridpaddingy" int);
|
||||||
ALTER TABLE "skill_tree_data" ADD FOREIGN KEY ("class_id") REFERENCES "class" ("id");
|
ALTER TABLE "skill_tree_data" ADD FOREIGN KEY ("class_id") REFERENCES "class" ("id");
|
||||||
|
alter table skill_tree_data add column halflineheight int;
|
||||||
|
CREATE TABLE "site_data" ("id" SERIAL UNIQUE PRIMARY KEY,"field" text,"data" text);
|
||||||
|
@ -127,7 +127,7 @@ CREATE TABLE "armor" (
|
|||||||
"panic_res" float,
|
"panic_res" float,
|
||||||
"poison_res" float,
|
"poison_res" float,
|
||||||
"slot" int,
|
"slot" int,
|
||||||
"pb_gauge_build" float,
|
"battle_power_value" float,
|
||||||
"icon" text,
|
"icon" text,
|
||||||
"popularity" int,
|
"popularity" int,
|
||||||
"editors_choice" int
|
"editors_choice" int
|
||||||
@ -316,7 +316,14 @@ CREATE TABLE "skill_tree_data" (
|
|||||||
"gridsizex" int,
|
"gridsizex" int,
|
||||||
"gridsizey" int,
|
"gridsizey" int,
|
||||||
"gridpaddingx" int,
|
"gridpaddingx" int,
|
||||||
"gridpaddingy" int
|
"gridpaddingy" int,
|
||||||
|
"halflineheight" int
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "site_data" (
|
||||||
|
"id" SERIAL UNIQUE PRIMARY KEY,
|
||||||
|
"field" text,
|
||||||
|
"data" text
|
||||||
);
|
);
|
||||||
|
|
||||||
ALTER TABLE "builds" ADD FOREIGN KEY ("users_id") REFERENCES "users" ("id");
|
ALTER TABLE "builds" ADD FOREIGN KEY ("users_id") REFERENCES "users" ("id");
|
||||||
|
@ -276,5 +276,7 @@ insert into class_skill_data(name,class_skill_id,dependency,level,effect,duratio
|
|||||||
insert into class_skill_data(name,class_skill_id,dependency,level,effect,duration,cooldown,damage_taken,pa_potency,conditional_buff,pp_recovery,property,all_damage_buff,active_pp_recovery,status_ailment_accum,status_ailment_duration,pp_consumption,max_hp_decrease,natural_pp_recovery,added_pp,pb_gauge_fortification)
|
insert into class_skill_data(name,class_skill_id,dependency,level,effect,duration,cooldown,damage_taken,pa_potency,conditional_buff,pp_recovery,property,all_damage_buff,active_pp_recovery,status_ailment_accum,status_ailment_duration,pp_consumption,max_hp_decrease,natural_pp_recovery,added_pp,pb_gauge_fortification)
|
||||||
values('Assault Charge Advent',(SELECT id from class_skill WHERE name='Assault Charge Advent' limit 1),'',1,'Effect Name',30,24,1.0,1.1,false,0.8,'',0,0,0,0,0,0,0.6,0,0);
|
values('Assault Charge Advent',(SELECT id from class_skill WHERE name='Assault Charge Advent' limit 1),'',1,'Effect Name',30,24,1.0,1.1,false,0.8,'',0,0,0,0,0,0,0.6,0,0);
|
||||||
|
|
||||||
insert into skill_tree_data(class_id,data,skill_data,line_color,line_width,gridsizex,gridsizey,gridpaddingx,gridpaddingy)
|
insert into skill_tree_data(class_id,data,skill_data,line_color,line_width,gridsizex,gridsizey,gridpaddingx,gridpaddingy,halflineheight)
|
||||||
values((select id from class where name='Hunter'),'□ □ ,└□─┘□□, │ ││, │ □│, □─□┼□, □ ','','#000000',3,80,60,10,10);
|
values((select id from class where name='Hunter'),'□ □ ,└□─┘□□, │ ││, │ □│, □─□┼□, □ ','','#000000',3,80,60,10,10,60);
|
||||||
|
|
||||||
|
insert into site_data(field,data) values('UNDER_CONSTRUCTION_TEXT','NGSplanner.com is currently under construction! Please check back after Sig yells at me enough to help finish it.');
|
832
server_test.js
Normal file
832
server_test.js
Normal file
@ -0,0 +1,832 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const app = express()
|
||||||
|
const bodyParser = require('body-parser');
|
||||||
|
|
||||||
|
const { Pool } = require('pg');
|
||||||
|
|
||||||
|
const db = new Pool({
|
||||||
|
connectionString: process.env.DATABASE_URL,
|
||||||
|
ssl: {
|
||||||
|
rejectUnauthorized: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const PORT = process.env.PORT || 5000;
|
||||||
|
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);
|
||||||
|
app.listen(PORT, () => console.log(`Listening on ${ PORT }`));
|
||||||
|
|
||||||
|
var authenticated = true;
|
||||||
|
|
||||||
|
|
||||||
|
const PREFIX=""
|
||||||
|
|
||||||
|
const ENDPOINTDATA=[
|
||||||
|
{
|
||||||
|
endpoint:"class",
|
||||||
|
requiredfields:["name"],
|
||||||
|
optionalfields:["icon"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"class_level_data",
|
||||||
|
requiredfields:["class_id","level","hp","atk","def","name"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"class_weapon_type_data",
|
||||||
|
requiredfields:["class_id","weapon_type_id"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"weapon",
|
||||||
|
requiredfields:["name","rarity","level_req","atk"],
|
||||||
|
optionalfields:["potential_id","variance","base_affix_slots","drop_info","pb_gauge_build","icon"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"weapon_existence_data",
|
||||||
|
requiredfields:["weapon_type_id","weapon_id"],
|
||||||
|
optionalfields:["popularity","editors_choice","icon","special_name"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"weapon_type",
|
||||||
|
requiredfields:["name","dmg_type"],
|
||||||
|
optionalfields:["icon","shorthand"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"photon_art",
|
||||||
|
requiredfields:["name","weapon_type_id","potency","dps"],
|
||||||
|
optionalfields:["power_distribution","pp","frames","icon"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"armor",
|
||||||
|
requiredfields:["name","rarity","level_req","def"],
|
||||||
|
optionalfields:["hp","pp","mel_dmg","rng_dmg","tec_dmg","crit_rate","crit_dmg","pp_cost_reduction","active_pp_recovery","natural_pp_recovery","dmg_res","all_down_res","burn_res","freeze_res","blind_res","shock_res","panic_res","poison_res","battle_power_value","slot","icon","popularity","editors_choice"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"potential",
|
||||||
|
requiredfields:["name"],
|
||||||
|
optionalfields:["icon"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"potential_data",
|
||||||
|
requiredfields:["potential_id","level","name"],
|
||||||
|
optionalfields:["mel_dmg","rng_dmg","tec_dmg","crit_rate","crit_dmg","pp_cost_reduction","active_pp_recovery","natural_pp_recovery","dmg_res","all_down_res","burn_res","freeze_res","blind_res","shock_res","panic_res","poison_res","battle_power_value","pb_gauge_build","description"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"builds",
|
||||||
|
requiredfields:["users_id","creator","build_name","class1","created_on","last_modified","data"],
|
||||||
|
optionalfields:["class2","likes","editors_choice"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"skill",
|
||||||
|
requiredfields:["name","skill_type_id"],
|
||||||
|
optionalfields:["icon"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"skill_type",
|
||||||
|
requiredfields:["name"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"skill_data",
|
||||||
|
requiredfields:["skill_id","level","name"],
|
||||||
|
optionalfields:["variance","mel_dmg","rng_dmg","tec_dmg","crit_rate","crit_dmg","pp_cost_reduction","active_pp_recovery","natural_pp_recovery","dmg_res","popularity","editors_choice"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"class_skill",
|
||||||
|
requiredfields:["name","class_id"],
|
||||||
|
optionalfields:["icon","description"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"class_skill_data",
|
||||||
|
requiredfields:["name","class_skill_id","level"],
|
||||||
|
optionalfields:["dependency","effect","duration","cooldown","damage_taken","pa_potency","conditional_buff","pp_recovery","property","all_damage_buff","active_pp_recovery","status_ailment_accum","status_ailment_duration","pp_consumption","max_hp_decrease","natural_pp_recovery","added_pp","pb_gauge_fortification"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"augment",
|
||||||
|
requiredfields:["augment_type_id","name"],
|
||||||
|
optionalfields:["variance","hp","pp","mel_dmg","rng_dmg","tec_dmg","crit_rate","crit_dmg","pp_cost_reduction","active_pp_recovery","natural_pp_recovery","dmg_res","affix_success_rate","all_down_res","burn_res","freeze_res","blind_res","shock_res","panic_res","poison_res","battle_power_value","pb_gauge_build","popularity","editors_choice"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"augment_type",
|
||||||
|
requiredfields:["name"],
|
||||||
|
optionalfields:["icon"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"enemy_data",
|
||||||
|
requiredfields:["level","def","atk"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"food",
|
||||||
|
requiredfields:["name"],
|
||||||
|
optionalfields:["potency","pp","dmg_res","hp","pp_consumption","pp_recovery","weak_point_dmg","hp_recovery","popularity","editors_choice"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"food_mult",
|
||||||
|
requiredfields:["amount"],
|
||||||
|
optionalfields:["potency","pp","dmg_res","hp","pp_consumption","pp_recovery","weak_point_dmg","hp_recovery"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"roles",
|
||||||
|
requiredfields:["name"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"users",
|
||||||
|
requiredfields:["username","email","created_on","roles_id"],
|
||||||
|
optionalfields:["avatar","editors_choice","recovery_hash"],
|
||||||
|
excludedfields:["password_hash"] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"database_audit",
|
||||||
|
requiredfields:["action","table_name","row_name","row_id","new_value","date","users_id"],
|
||||||
|
optionalfields:["old_value"],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"skill_tree_data",
|
||||||
|
requiredfields:["class_id","data","skill_data","line_color","line_width","gridsizex","gridsizey","gridpaddingx","gridpaddingy","halflineheight"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endpoint:"site_data",
|
||||||
|
requiredfields:["field","data"],
|
||||||
|
optionalfields:[],
|
||||||
|
excludedfields:[] //Fields to not output in GET.
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const MAXATTEMPTS=5
|
||||||
|
const LOCKOUTTIME=60000
|
||||||
|
var failedattempts=0
|
||||||
|
var lockedTime=new Date().getTime()-LOCKOUTTIME //Starts unlocked
|
||||||
|
|
||||||
|
for (var test of ["","/test"]) {
|
||||||
|
|
||||||
|
app.post(PREFIX+test+"/passwordcheck",(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
res.status(200).json({verified:true})
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
app.get(PREFIX+test+"/databases",(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.query.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db.query('select * from pg_database where datname like \'ngsplanner%\' order by datname desc limit 100')
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+test+"/databases/restorefrombackup",(req,res)=>{
|
||||||
|
if (req.body.database) {
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db3.query('select * from pg_database where datname=$1',[req.body.database])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
db.end(()=>{})
|
||||||
|
return db3.query('select pg_terminate_backend (pid) from pg_stat_activity where pg_stat_activity.datname=\'ngsplanner\'')
|
||||||
|
} else {
|
||||||
|
var msg="Could not find requested database "+req.body.database;res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('drop database ngsplanner')
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('create database ngsplanner with template '+req.body.database)
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
db = new Pool({
|
||||||
|
user: 'postgres',
|
||||||
|
password: '',
|
||||||
|
host: 'postgres',
|
||||||
|
database: 'ngsplanner',
|
||||||
|
port: 5432,
|
||||||
|
})
|
||||||
|
res.status(200).send("Done!")
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
console.log(err.message)
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.status(500).send("Invalid data!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
app.post(PREFIX+test+"/databases/testtolive",(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
db.end(()=>{})
|
||||||
|
db2.end(()=>{})
|
||||||
|
return db3.query('select pg_terminate_backend (pid) from pg_stat_activity where pg_stat_activity.datname=\'ngsplanner\' or pg_stat_activity.datname=\'ngsplanner2\'')
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('drop database ngsplanner')
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('create database ngsplanner with template ngsplanner2')
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
db = new Pool({
|
||||||
|
user: 'postgres',
|
||||||
|
password: '',
|
||||||
|
host: 'postgres',
|
||||||
|
database: 'ngsplanner',
|
||||||
|
port: 5432,
|
||||||
|
})
|
||||||
|
db2 = new Pool({
|
||||||
|
user: 'postgres',
|
||||||
|
password: '',
|
||||||
|
host: 'postgres',
|
||||||
|
database: 'ngsplanner2',
|
||||||
|
port: 5432,
|
||||||
|
})
|
||||||
|
res.status(200).send("Done!")
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
console.log(err.message)
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+test+"/databases/livetotest",(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
db.end(()=>{})
|
||||||
|
db2.end(()=>{})
|
||||||
|
return db3.query('select pg_terminate_backend (pid) from pg_stat_activity where pg_stat_activity.datname=\'ngsplanner\' or pg_stat_activity.datname=\'ngsplanner2\'')
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('drop database ngsplanner2')
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('create database ngsplanner2 with template ngsplanner')
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
db = new Pool({
|
||||||
|
user: 'postgres',
|
||||||
|
password: '',
|
||||||
|
host: 'postgres',
|
||||||
|
database: 'ngsplanner',
|
||||||
|
port: 5432,
|
||||||
|
})
|
||||||
|
db2 = new Pool({
|
||||||
|
user: 'postgres',
|
||||||
|
password: '',
|
||||||
|
host: 'postgres',
|
||||||
|
database: 'ngsplanner2',
|
||||||
|
port: 5432,
|
||||||
|
})
|
||||||
|
res.status(200).send("Done!")
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+test+"/databases/backup",(req,res)=>{
|
||||||
|
var date = new Date()
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
db.end(()=>{})
|
||||||
|
return db3.query('select pg_terminate_backend (pid) from pg_stat_activity where pg_stat_activity.datname=\'ngsplanner\'')
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
return db3.query('create database ngsplanner'+String(date.getFullYear()).padStart(4,'0')+String(date.getMonth()).padStart(2,'0')+String(date.getDate()).padStart(2,'0')+String(date.getHours()).padStart(2,'0')+String(date.getMinutes()).padStart(2,'0')+String(date.getSeconds()).padStart(2,'0')+' with template ngsplanner')
|
||||||
|
})
|
||||||
|
.then(()=>{
|
||||||
|
db = new Pool({
|
||||||
|
user: 'postgres',
|
||||||
|
password: '',
|
||||||
|
host: 'postgres',
|
||||||
|
database: 'ngsplanner',
|
||||||
|
port: 5432,
|
||||||
|
})
|
||||||
|
res.status(200).send("Done!")
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function CreateDynamicEndpoints() {
|
||||||
|
ENDPOINTDATA.forEach((endpoint)=>{
|
||||||
|
app.get(PREFIX+"/"+endpoint.endpoint,(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.query.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
db.query('select distinct on (name) name,* from '+endpoint.endpoint+' order by name,id desc')
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json({fields:data.fields,rows:data.rows})
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
db.query('select * from '+endpoint.endpoint+" order by id desc")
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json({fields:data.fields,rows:data.rows})
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.status(500).send("Could not authenticate!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+"/"+endpoint.endpoint,async(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then(async(data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
var allExist=true
|
||||||
|
endpoint.requiredfields.forEach((field)=>{
|
||||||
|
if (!(field in req.body)) {
|
||||||
|
allExist=false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!allExist) {
|
||||||
|
res.status(300).send("Required fields are: "+endpoint.requiredfields.filter((field)=>!(field in req.body)).join(','))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var combinedfields = [...endpoint.requiredfields,...endpoint.optionalfields,...endpoint.excludedfields]
|
||||||
|
//console.log(combinedfields)
|
||||||
|
var all_filled_fields=combinedfields.filter((field)=>(field in req.body))
|
||||||
|
var requiresInsert=true
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
await db.query('update '+endpoint.endpoint+' set '+all_filled_fields.map((field,i)=>{
|
||||||
|
if (!field.includes("_id")) {return field+"=$"+(i+1)}else{
|
||||||
|
if (Number.isNaN(Number(req.body[field]))) {return field+"=(select id from "+field.replace("_id","")+" where name=$"+(i+1)+")"} else {return field+"=$"+(i+1)}
|
||||||
|
}}).join(",")+' where name=$'+(all_filled_fields.length+1)+' returning *',[...all_filled_fields.map((field)=>req.body[field]),req.body["name"]])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length===0) {
|
||||||
|
requiresInsert=true
|
||||||
|
} else {
|
||||||
|
requiresInsert=false
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (requiresInsert) {
|
||||||
|
db.query('insert into '+endpoint.endpoint+"("+all_filled_fields.join(',')+") values("+all_filled_fields.map((field,i)=>{
|
||||||
|
if (!field.includes("_id")) {return "$"+(i+1)}else{
|
||||||
|
if (Number.isNaN(Number(req.body[field]))) {return "(select id from "+field.replace("_id","")+" where name=$"+(i+1)+")"} else {return "$"+(i+1)}
|
||||||
|
}}).join(",")+") returning *",all_filled_fields.map((field)=>req.body[field]))
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}app.post(PREFIX+"/"+endpoint.endpoint,async(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then(async(data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
var allExist=true
|
||||||
|
endpoint.requiredfields.forEach((field)=>{
|
||||||
|
if (!(field in req.body)) {
|
||||||
|
allExist=false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!allExist) {
|
||||||
|
res.status(300).send("Required fields are: "+endpoint.requiredfields.filter((field)=>!(field in req.body)).join(','))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var combinedfields = [...endpoint.requiredfields,...endpoint.optionalfields,...endpoint.excludedfields]
|
||||||
|
//console.log(combinedfields)
|
||||||
|
var all_filled_fields=combinedfields.filter((field)=>(field in req.body))
|
||||||
|
var requiresInsert=true
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
await db.query('update '+endpoint.endpoint+' set '+all_filled_fields.map((field,i)=>{
|
||||||
|
if (!field.includes("_id")) {return field+"=$"+(i+1)}else{
|
||||||
|
if (Number.isNaN(Number(req.body[field]))) {return field+"=(select id from "+field.replace("_id","")+" where name=$"+(i+1)+")"} else {return field+"=$"+(i+1)}
|
||||||
|
}}).join(",")+' where name=$'+(all_filled_fields.length+1)+' returning *',[...all_filled_fields.map((field)=>req.body[field]),req.body["name"]])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length===0) {
|
||||||
|
requiresInsert=true
|
||||||
|
} else {
|
||||||
|
requiresInsert=false
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (requiresInsert) {
|
||||||
|
db.query('insert into '+endpoint.endpoint+"("+all_filled_fields.join(',')+") values("+all_filled_fields.map((field,i)=>{
|
||||||
|
if (!field.includes("_id")) {return "$"+(i+1)}else{
|
||||||
|
if (Number.isNaN(Number(req.body[field]))) {return "(select id from "+field.replace("_id","")+" where name=$"+(i+1)+")"} else {return "$"+(i+1)}
|
||||||
|
}}).join(",")+") returning *",all_filled_fields.map((field)=>req.body[field]))
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.status(500).send("Could not authenticate!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.status(500).send("Could not authenticate!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.patch(PREFIX+"/"+endpoint.endpoint,(req,res)=>{
|
||||||
|
if (req.body.id) {
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
var combinedfields = [...endpoint.requiredfields,...endpoint.optionalfields,...endpoint.excludedfields]
|
||||||
|
//console.log(combinedfields)
|
||||||
|
var all_filled_fields=combinedfields.filter((field)=>(field in req.body))
|
||||||
|
|
||||||
|
return db.query('update '+endpoint.endpoint+' set '+all_filled_fields.map((field,i)=>field+"=$"+(i+1)).join(",")+" where id=$"+(all_filled_fields.length+1)+" returning *",[...all_filled_fields.map((field)=>req.body[field]),req.body.id])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.status(300).send("Invalid query!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.delete(PREFIX+"/"+endpoint.endpoint,(req,res)=>{
|
||||||
|
if (req.body.id) {
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db.query('delete from '+endpoint.endpoint+' where id=$1 returning *',[req.body.id])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.status(300).send("Invalid query!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get(PREFIX+"/test/"+endpoint.endpoint,(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.query.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
db2.query('select distinct on (name) name,* from '+endpoint.endpoint+' order by name,id desc')
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json({fields:data.fields,rows:data.rows})
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
db2.query('select * from '+endpoint.endpoint+" order by id desc")
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json({fields:data.fields,rows:data.rows})
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.status(500).send("Could not authenticate!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+"/test/"+endpoint.endpoint,async(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then(async(data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
var allExist=true
|
||||||
|
endpoint.requiredfields.forEach((field)=>{
|
||||||
|
if (!(field in req.body)) {
|
||||||
|
allExist=false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!allExist) {
|
||||||
|
res.status(300).send("Required fields are: "+endpoint.requiredfields.filter((field)=>!(field in req.body)).join(','))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var combinedfields = [...endpoint.requiredfields,...endpoint.optionalfields,...endpoint.excludedfields]
|
||||||
|
//console.log(combinedfields)
|
||||||
|
var all_filled_fields=combinedfields.filter((field)=>(field in req.body))
|
||||||
|
var requiresInsert=true
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
await db2.query('update '+endpoint.endpoint+' set '+all_filled_fields.map((field,i)=>field+"=$"+(i+1)).join(",")+' where name=$'+(all_filled_fields.length+1)+' returning *',[...all_filled_fields.map((field)=>req.body[field]),req.body["name"]])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length===0) {
|
||||||
|
requiresInsert=true
|
||||||
|
} else {
|
||||||
|
requiresInsert=false
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (requiresInsert) {
|
||||||
|
db2.query('insert into '+endpoint.endpoint+"("+all_filled_fields.join(',')+") values("+all_filled_fields.map((field,i)=>"$"+(i+1)).join(",")+") returning *",all_filled_fields.map((field)=>req.body[field]))
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.status(500).send("Could not authenticate!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.patch(PREFIX+"/test/"+endpoint.endpoint,(req,res)=>{
|
||||||
|
if (req.body.id) {
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
var combinedfields = [...endpoint.requiredfields,...endpoint.optionalfields,...endpoint.excludedfields]
|
||||||
|
//console.log(combinedfields)
|
||||||
|
var all_filled_fields=combinedfields.filter((field)=>(field in req.body))
|
||||||
|
|
||||||
|
return db2.query('update '+endpoint.endpoint+' set '+all_filled_fields.map((field,i)=>field+"=$"+(i+1)).join(",")+" where id=$"+(all_filled_fields.length+1)+" returning *",[...all_filled_fields.map((field)=>req.body[field]),req.body.id])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.status(300).send("Invalid query!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.delete(PREFIX+"/test/"+endpoint.endpoint,(req,res)=>{
|
||||||
|
if (req.body.id) {
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db2.query('delete from '+endpoint.endpoint+' where id=$1 returning *',[req.body.id])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).json(data.rows)
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.status(300).send("Invalid query!")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function CleanUp(arr,vals){
|
||||||
|
return arr.map((arrVal)=>{
|
||||||
|
vals.forEach((val)=>{
|
||||||
|
arrVal[val]=undefined
|
||||||
|
})
|
||||||
|
return arrVal
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
app.get(PREFIX+'/data',async(req,res)=>{
|
||||||
|
var finalresult = {}
|
||||||
|
var promises = []
|
||||||
|
for (var endpoint of ENDPOINTDATA) {
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
await db.query('select * from (select distinct on (name) name,* from '+endpoint.endpoint+' order by name,id desc)t order by id asc')
|
||||||
|
.then((data)=>{
|
||||||
|
finalresult[endpoint.endpoint]={}
|
||||||
|
data.rows.forEach((val)=>{finalresult[endpoint.endpoint][val.name]=val})
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
await db.query('select * from '+endpoint.endpoint+" order by id desc")
|
||||||
|
.then((data)=>{
|
||||||
|
finalresult[endpoint.endpoint]=data.rows
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.status(200).json(finalresult)
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get(PREFIX+'/test/data',async(req,res)=>{
|
||||||
|
var finalresult = {}
|
||||||
|
var promises = []
|
||||||
|
for (var endpoint of ENDPOINTDATA) {
|
||||||
|
if (endpoint.requiredfields.includes("name")) {
|
||||||
|
await db2.query('select distinct on (name) name,* from '+endpoint.endpoint+' order by name,id desc')
|
||||||
|
.then((data)=>{
|
||||||
|
finalresult[endpoint.endpoint]={}
|
||||||
|
data.rows.forEach((val)=>{finalresult[endpoint.endpoint][val.name]=val})
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
await db2.query('select * from '+endpoint.endpoint+" order by id desc")
|
||||||
|
.then((data)=>{
|
||||||
|
finalresult[endpoint.endpoint]=data.rows
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.status(200).json(finalresult)
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get(PREFIX+'/dataid',async(req,res)=>{
|
||||||
|
var finalresult = {}
|
||||||
|
var promises = []
|
||||||
|
for (var endpoint of ENDPOINTDATA) {
|
||||||
|
await db.query('select * from '+endpoint.endpoint+' order by id asc')
|
||||||
|
.then((data)=>{
|
||||||
|
finalresult[endpoint.endpoint]={}
|
||||||
|
data.rows.forEach((val)=>{finalresult[endpoint.endpoint][val.id]=val})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
res.status(200).json(finalresult)
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get(PREFIX+'/test/dataid',async(req,res)=>{
|
||||||
|
var finalresult = {}
|
||||||
|
var promises = []
|
||||||
|
for (var endpoint of ENDPOINTDATA) {
|
||||||
|
await db2.query('select * from '+endpoint.endpoint+' order by id asc')
|
||||||
|
.then((data)=>{
|
||||||
|
finalresult[endpoint.endpoint]={}
|
||||||
|
data.rows.forEach((val)=>{finalresult[endpoint.endpoint][val.id]=val})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
res.status(200).json(finalresult)
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+"/validUser",(req,res)=>{
|
||||||
|
//console.log(sh.SecretHash("098f6bcd4621d373cade4e832627b4f6"))
|
||||||
|
db.query('select * from users where username=$1 and password_hash=$2 limit 1',[req.body.username,sh.SecretHash(req.body.password)])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
res.status(200).json({verified:true})
|
||||||
|
} else {
|
||||||
|
res.status(200).json({verified:false})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+"/saveskilltree",(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db.query('select * from skill_tree_data where class_id=$1 limit 1',[req.body.class_id])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db.query('update skill_tree_data set data=$1,skill_data=$2,line_color=$3,line_width=$4,gridsizex=$5,gridsizey=$6,gridpaddingx=$7,gridpaddingy=$8,halflineheight=$9 where class_id=$10',
|
||||||
|
[req.body.data,req.body.skill_data,req.body.line_color,req.body.line_width,req.body.gridsizex,req.body.gridsizey,req.body.gridpaddingx,req.body.gridpaddingy,req.body.halflineheight,req.body.class_id])
|
||||||
|
} else {
|
||||||
|
return db.query('insert into skill_tree_data(data,skill_data,line_color,line_width,gridsizex,gridsizey,gridpaddingx,gridpaddingy,class_id,halflineheight) values($1,$2,$3,$4,$5,$6,$7,$8,$10,$9)',
|
||||||
|
[req.body.data,req.body.skill_data,req.body.line_color,req.body.line_width,req.body.gridsizex,req.body.gridsizey,req.body.gridpaddingx,req.body.gridpaddingy,req.body.halflineheight,req.body.class_id])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).send("OK!")
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post(PREFIX+"/test/saveskilltree",(req,res)=>{
|
||||||
|
db.query('select * from password where password=$1',[req.body.pass])
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db2.query('select * from skill_tree_data where class_id=$1 limit 1',[req.body.class_id])
|
||||||
|
} else {
|
||||||
|
var msg="Could not authenticate!";res.status(500).send(msg);throw msg
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
if (data.rows.length>0) {
|
||||||
|
return db2.query('update skill_tree_data set data=$1,skill_data=$2,line_color=$3,line_width=$4,gridsizex=$5,gridsizey=$6,gridpaddingx=$7,gridpaddingy=$8,halflineheight=$9 where class_id=$10',
|
||||||
|
[req.body.data,req.body.skill_data,req.body.line_color,req.body.line_width,req.body.gridsizex,req.body.gridsizey,req.body.gridpaddingx,req.body.gridpaddingy,req.body.halflineheight,req.body.class_id])
|
||||||
|
} else {
|
||||||
|
return db2.query('insert into skill_tree_data(data,skill_data,line_color,line_width,gridsizex,gridsizey,gridpaddingx,gridpaddingy,class_id,halflineheight) values($1,$2,$3,$4,$5,$6,$7,$8,$10,$9)',
|
||||||
|
[req.body.data,req.body.skill_data,req.body.line_color,req.body.line_width,req.body.gridsizex,req.body.gridsizey,req.body.gridpaddingx,req.body.gridpaddingy,req.body.halflineheight,req.body.class_id])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((data)=>{
|
||||||
|
res.status(200).send("OK!")
|
||||||
|
})
|
||||||
|
.catch((err)=>{
|
||||||
|
res.status(500).send(err.message)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
//Generates our table schema:
|
||||||
|
ENDPOINTDATA.forEach((endpoint)=>{
|
||||||
|
console.log(endpoint.endpoint+":\n\t"+endpoint.requiredfields.join('\t')+(endpoint.optionalfields.length>0?"\t":"")+endpoint.optionalfields.join("\t"))
|
||||||
|
})
|
||||||
|
|
||||||
|
CreateDynamicEndpoints()
|
Loading…
x
Reference in New Issue
Block a user