diff --git a/ngsplanner_patch.sql b/ngsplanner_patch.sql index b557a1c..5316e3f 100644 --- a/ngsplanner_patch.sql +++ b/ngsplanner_patch.sql @@ -13,3 +13,17 @@ CREATE TABLE "skill_tree_data"("id" SERIAL UNIQUE PRIMARY KEY,"class_id" int,"da 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); +alter table class_skill_data alter column damage_taken set data type text; +alter table class_skill_data alter column pa_potency set data type text; +alter table class_skill_data alter column conditional_buff set data type text; +alter table class_skill_data alter column pp_recovery set data type text; +alter table class_skill_data alter column property set data type text; +alter table class_skill_data alter column all_damage_buff set data type text; +alter table class_skill_data alter column active_pp_recovery set data type text; +alter table class_skill_data alter column status_ailment_accum set data type text; +alter table class_skill_data alter column status_ailment_duration set data type text; +alter table class_skill_data alter column pp_consumption set data type text; +alter table class_skill_data alter column max_hp_decrease set data type text; +alter table class_skill_data alter column natural_pp_recovery set data type text; +alter table class_skill_data alter column pb_gauge_fortification set data type text; +alter table site_data rename column field to name; \ No newline at end of file diff --git a/ngsplanner_schema.sql b/ngsplanner_schema.sql index 37ecf75..d41cfa5 100644 --- a/ngsplanner_schema.sql +++ b/ngsplanner_schema.sql @@ -117,7 +117,7 @@ CREATE TABLE "armor" ( "crit_dmg" float, "pp_cost_reduction" float, "active_pp_recovery" float, - "natural_pp_recovery" float, + "natural_pp_recovery" text, "dmg_res" float, "all_down_res" float, "burn_res" float, @@ -247,20 +247,20 @@ CREATE TABLE "class_skill_data" ( "effect" text, "duration" int, "cooldown" int, - "damage_taken" float, - "pa_potency" float, + "damage_taken" text, + "pa_potency" text, "conditional_buff" boolean, - "pp_recovery" float, + "pp_recovery" text, "property" text, - "all_damage_buff" float, - "active_pp_recovery" float, - "status_ailment_accum" float, - "status_ailment_duration" float, - "pp_consumption" float, - "max_hp_decrease" float, - "natural_pp_recovery" float, + "all_damage_buff" text, + "active_pp_recovery" text, + "status_ailment_accum" text, + "status_ailment_duration" text, + "pp_consumption" text, + "max_hp_decrease" text, + "natural_pp_recovery" text, "added_pp" int, - "pb_gauge_fortification" float + "pb_gauge_fortification" text ); CREATE TABLE "database_audit" ( @@ -322,7 +322,7 @@ CREATE TABLE "skill_tree_data" ( CREATE TABLE "site_data" ( "id" SERIAL UNIQUE PRIMARY KEY, - "field" text, + "name" text, "data" text ); diff --git a/ngsplanner_seed.sql b/ngsplanner_seed.sql index 4dba741..593d865 100644 --- a/ngsplanner_seed.sql +++ b/ngsplanner_seed.sql @@ -268,15 +268,15 @@ insert into class_skill(name,class_id,icon,description) values('Assault Charge Advent',(SELECT id from class WHERE name='Gunner' limit 1),'','This is '); 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('Hunter Physique Lv.1',(SELECT id from class_skill WHERE name='Hunter Physique' limit 1),'',1,'Effect Name',20,15,0.7,1,false,0.5,'',0,0,0,0,0,0,0,0,0); + values('Hunter Physique Lv.1',(SELECT id from class_skill WHERE name='Hunter Physique' limit 1),'',1,'Effect Name',20,15,'0.7','1',false,'0.5','','0','0','0','0','0','0','0',0,'0'); 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('War Cry Lv.1',(SELECT id from class_skill WHERE name='War Cry' limit 1),'',1,'Effect Name',14,10,0.5,1.1,false,0.8,'',0,0,0,0.6,0,0,0,0,0); + values('War Cry Lv.1',(SELECT id from class_skill WHERE name='War Cry' limit 1),'',1,'Effect Name',14,10,0.5,'1.1','0.8',false,'0.6','','0','0','0','0','0','0','0',0,'0'); 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('War Cry Lv.2',(SELECT id from class_skill WHERE name='War Cry' limit 1),'',2,'Effect Name',11,11,0.8,1.0,false,0.7,'',0,0,0,0.9,0,0,0,0,0); + values('War Cry Lv.2',(SELECT id from class_skill WHERE name='War Cry' limit 1),'',2,'Effect Name',11,11,'0.8','1',false,'0.5','','0','0','0','0','0','0','0',0,'0'); 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.8','1',false,'0.5','','0','0','0','0','0','0','0',0,'1.6'); 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,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.'); \ No newline at end of file +insert into site_data(name,data) values('UNDER_CONSTRUCTION_TEXT','NGSplanner.com is currently under construction! Please check back after Sig yells at me enough to help finish it.'); \ No newline at end of file diff --git a/server.js b/server.js index 6cb7fcf..fc363fe 100644 --- a/server.js +++ b/server.js @@ -229,7 +229,7 @@ const ENDPOINTDATA=[ }, { endpoint:"site_data", - requiredfields:["field","data"], + requiredfields:["name","data"], optionalfields:[], excludedfields:[] //Fields to not output in GET. } @@ -472,10 +472,14 @@ function CreateDynamicEndpoints() { var all_filled_fields=combinedfields.filter((field)=>(field in req.body)) var requiresInsert=true if (endpoint.requiredfields.includes("name")) { + /*console.log(['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"]]])*/ 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"]]) + }}).join(",")+' where name=$'+(all_filled_fields.length+1)+' returning *',[...all_filled_fields.map((field)=>typeof req.body[field] === 'string'?req.body[field].trim():req.body[field]),req.body["name"]]) .then((data)=>{ if (data.rows.length===0) { requiresInsert=true @@ -492,7 +496,7 @@ function CreateDynamicEndpoints() { 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])) + }}).join(",")+") returning *",all_filled_fields.map((field)=>typeof req.body[field] === 'string'?req.body[field].trim():req.body[field])) .then((data)=>{ res.status(200).json(data.rows) }) @@ -521,8 +525,10 @@ function CreateDynamicEndpoints() { 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"]]) + if (Number.isNaN(Number(req.body[field]))) { + console.log(field+"=(select id from "+field.replace("_id","")+" where name=$"+(i+1)+")"); + 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)=>typeof req.body[field] === 'string'?req.body[field].trim():req.body[field]),req.body["name"]]) .then((data)=>{ if (data.rows.length===0) { requiresInsert=true @@ -539,7 +545,7 @@ function CreateDynamicEndpoints() { 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])) + }}).join(",")+") returning *",all_filled_fields.map((field)=>typeof req.body[field] === 'string'?req.body[field].trim():req.body[field])) .then((data)=>{ res.status(200).json(data.rows) }) @@ -551,11 +557,19 @@ function CreateDynamicEndpoints() { res.status(500).send("Could not authenticate!") } }) + .catch((err)=>{ + console.log(err.message) + res.status(500).send(err.message) + }) }) } else { res.status(500).send("Could not authenticate!") } }) + .catch((err)=>{ + console.log(err.message) + res.status(500).send(err.message) + }) }) app.patch(PREFIX+"/"+endpoint.endpoint,(req,res)=>{ @@ -651,7 +665,63 @@ function CreateDynamicEndpoints() { 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"]]) + /*console.log(['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"]]])*/ + await db2.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)=>typeof req.body[field] === 'string'?req.body[field].trim():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)=>{ + 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)=typeof req.body[field] === 'string'?req.body[field].trim():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)=>{ + db4.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)=>{ + if (!field.includes("_id")) {return field+"=$"+(i+1)}else{ + if (Number.isNaN(Number(req.body[field]))) { + console.log(field+"=(select id from "+field.replace("_id","")+" where name=$"+(i+1)+")"); + 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)=>typeof req.body[field] === 'string'?req.body[field].trim():req.body[field]),req.body["name"]]) .then((data)=>{ if (data.rows.length===0) { requiresInsert=true @@ -665,7 +735,10 @@ function CreateDynamicEndpoints() { }) } 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])) + db2.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)=>typeof req.body[field] === 'string'?req.body[field].trim():req.body[field])) .then((data)=>{ res.status(200).json(data.rows) }) @@ -677,6 +750,19 @@ function CreateDynamicEndpoints() { res.status(500).send("Could not authenticate!") } }) + .catch((err)=>{ + console.log(err.message) + res.status(500).send(err.message) + }) + }) + } else { + res.status(500).send("Could not authenticate!") + } + }) + .catch((err)=>{ + console.log(err.message) + res.status(500).send(err.message) + }) }) app.patch(PREFIX+"/test/"+endpoint.endpoint,(req,res)=>{