diff --git a/public/index.html b/public/index.html index a03a5d3..45e3d2a 100644 --- a/public/index.html +++ b/public/index.html @@ -40,6 +40,7 @@ propertyvalue(s) + diff --git a/public/partdb.js b/public/partdb.js index 3c87109..11d4ad7 100644 --- a/public/partdb.js +++ b/public/partdb.js @@ -144,3 +144,24 @@ function select() } } +function delete_part() +{ + if (null == parts) { + return; + } + const results = document.getElementById('results'); + if (results.selectedIndex < 0) { + return; + } + const part_selected = parseInt(results.options[results.selectedIndex].value); + const xhr = new XMLHttpRequest(); + xhr.open('GET', '/delete/' + part_selected, true); + xhr.onload = function() { + search(); // refresh search + }; + xhr.onerror = function() { + console.log("delete part failed"); + }; + xhr.send(); + +} diff --git a/server.rb b/server.rb index 85748c4..234bdc0 100755 --- a/server.rb +++ b/server.rb @@ -142,7 +142,7 @@ end get '/search/:terms' do terms = params['terms'].split(" ") terms.keep_if {|term| term.length >= 3} - halt 404 if terms.empty? + halt 400 if terms.empty? # search in names, description, and category statements = [] statements << @db.prepare("SELECT id FROM part WHERE name LIKE ?") @@ -177,3 +177,35 @@ get '/search/:terms' do parts.sort! {|x,y| x["name"] <=> y["name"]} parts.to_json end + +def delete_part(id) + # first delete all children + statement = @db.prepare("SELECT id FROM part WHERE family = ?") + statement.execute(id).each do |row| + puts "child: #{row['id']}" + delete_part(row['id']) + puts "deleted" + end + # delete all fields + statements = [] + statements << @db.prepare("DELETE FROM property_value WHERE part = ?") + statements << @db.prepare("DELETE FROM assembly WHERE assembled = ?") + statements << @db.prepare("DELETE FROM assembly WHERE component = ?") + statements << @db.prepare("DELETE FROM drawing WHERE part = ?") + statements << @db.prepare("DELETE FROM attachment WHERE part = ?") + statements << @db.prepare("DELETE FROM distribution WHERE part = ?") + statements << @db.prepare("DELETE FROM property_value WHERE part = ?") + statements << @db.prepare("DELETE FROM inventory WHERE part = ?") + statements << @db.prepare("DELETE FROM part WHERE id = ?") + statements.each do |statement| + statement.execute(id) + end +end + +get '/delete/:id' do + statement = @db.prepare("SELECT id FROM part WHERE id = ?") + result = statement.execute(params['id']) + halt 400 if result.to_a.empty? + delete_part(params['id']) + return 200 +end