danke!
so gehts:
var SQL_INSERT_MITARBEITER = "insert into mitarbeiter (name) select $name where not exists (select 1 from mitarbeiter where name = $name );";
var SQL_SELECT_USER_MITARBEITER_ID = "select user_id, mitarbeiter_id from user, mitarbeiter where user.email = $email and mitarbeiter.name = $name;";
var SQL_INSERT_USER_MITARBEITER = "insert into user_mitarbeiter (user_id, mitarbeiter_id) select $user_id, $m_id where not exists (select 1 from user_mitarbeiter where user_id = $user_id and mitarbeiter_id = $m_id);";
var SQL_INSERT_SKILL = "insert into mitarbeiter_skill (mitarbeiter_id, skill, subskill, nivau) values ($m_id, $skill, $subskill, $nivau);";
var SQL_UPDATE_SKILL = "update mitarbeiter_skill set nivau=$nivau where mitarbeiter_id = $m_id and skill = $skill and subskill = $subskill;";
this.generateOneUpdate = function(email, data) {
var db = new sqlite3.Database(dbRef);
var pro = function() {
new Promise(function(resolve, reject) {
var st = db.prepare(SQL_INSERT_MITARBEITER);
st.run({ $name: data.name },
function(err) {
if (err) {
reject({ success: false, dbError: err, msg: "msg1" });
}
else {
resolve();
}
});
st.finalize();
})
.then(function() {
return new Promise(function(resolve,reject) {
var st = db.prepare(SQL_SELECT_USER_MITARBEITER_ID);
st.get({ $email: email, $name: data.name },
function(err, row) {
if (err)
reject({ success: false, dbError: err, msg: "msg2" });
else
resolve(row);
});
st.finalize();
});
})
.then(function(umaRow) {
if (umaRow == null) {
reject({success: "msg2"});
} else {
return new Promise(function(resolve, reject) {
var st = db.prepare(SQL_INSERT_USER_MITARBEITER);
st.run({ $user_id: umaRow.user_id, $m_id: umaRow.mitarbeiter_id },
function(err) {
if (err)
reject({dbError: true, err: err, msg: "msg3"});
else
resolve(umaRow);
});
st.finalize();
});
}
})
.then(function(umaRow) {
if (umaRow == null) {
reject({success: "msg4"});
} else {
return new Promise(function(resolve, reject) {
var st = db.prepare(SQL_UPDATE_SKILL)
st.run(
{ $m_id: umaRow.mitarbeiter_id, $skill: data.skill, $subskill: data.subskill, $nivau: data.nivau},
function(err) {
if (err)
reject({dbError: true, err: err, msg: "msg5"});
else
resolve(umaRow);
});
st.finalize();
});
}
})
.then(function(umaRow) {
if (umaRow == null) {
reject({success: "msg6"});
} else {
return new Promise(function(resolve, reject) {
var st = db.prepare(SQL_INSERT_SKILL);
st.run(
{ $m_id: umaRow.mitarbeiter_id, $skill: data.skill, $subskill: data.subskill, $nivau: data.nivau },
function(err) {
if (err)
reject({dbError: true, err: err, msg: "msg7"});
else
resolve(umaRow);
});
st.finalize();
});
}
})
.catch(function(err) {
if (err.success) return;
if (err.dbError) {}
else if (err.msg) {}
});
}
pro();
db.close();
}
ich werd mir jetzt das löschen vornehmen.
idee:
ich speichere alle mitarbeiter_ids die zur user_id gehören vor aufruf von generateoneUpdate in einem arrray old_m. im anschluss führe ich die funktion generateOneUpdate aus und speichere alle neuen mitarbeiter_ids in einem array aktuell_m. danach lösche ich alle daten die zu den mitarbeiter_ids aus old_m gehören und die nicht in aktuell_m vorkommen.
übrigens:
manchmal muss ich die seite zweimal laden damit mir die daten die ich haben will vom server aus der db ausgelesen und an den client geschickt wurden. woran liegt das?