fix(exam-correct): fix request bodies

This commit is contained in:
Sarah Vaupel 2020-02-07 22:31:57 +01:00
parent df0aaca759
commit 0b186a5e1a

View File

@ -152,9 +152,7 @@ export class ExamCorrect {
setStatus(this._userInputStatus, STATUS.LOADING); setStatus(this._userInputStatus, STATUS.LOADING);
const body = { const body = this._toRequestBody(this._userInput.value);
user: this._userInput.value,
};
this._app.httpClient.post({ this._app.httpClient.post({
url: EXAM_CORRECT_URL_POST, url: EXAM_CORRECT_URL_POST,
@ -211,36 +209,17 @@ export class ExamCorrect {
const rowInfo = { const rowInfo = {
users: [user], users: [user],
results: results,
status: STATUS.LOADING, status: STATUS.LOADING,
}; };
if (results) rowInfo.results = results; if (results && results !== {}) rowInfo.results = results;
if (result) rowInfo.result = result === 'delete' ? null : result; if (result && result !== 'none') rowInfo.result = result;
this._addRow(rowInfo); this._addRow(rowInfo);
// clear inputs on validation success // clear inputs on validation success
this._clearUserInput(); this._clearUserInput();
this._partInputs.forEach(clearInput); this._partInputs.forEach(clearInput);
const body = { const body = this._toRequestBody(userId || user, results, result);
user: userId || user,
};
if (results && results !== {}) body.results = results;
if (result) {
switch (result) {
case 'delete': {
body.grade = null;
break;
}
case 'attended': {
body.grade = { status: this._resultGradeSelect.value };
break;
}
default: {
body.grade = { status: result };
}
}
}
this._app.httpClient.post({ this._app.httpClient.post({
url: EXAM_CORRECT_URL_POST, url: EXAM_CORRECT_URL_POST,
@ -318,14 +297,11 @@ export class ExamCorrect {
date: null, date: null,
}; };
console.log('response', response);
const candidateRows = (targetRow && [targetRow]) || [...this._element.rows]; const candidateRows = (targetRow && [targetRow]) || [...this._element.rows];
for (let row of candidateRows) { for (let row of candidateRows) {
let userElem = row.cells.item(this._cIndices.get('user')); let userElem = row.cells.item(this._cIndices.get('user'));
const userIdent = userElem && userElem.getAttribute(EXAM_CORRECT_USER_ATTR); // TODO use other attribute identifier const userIdent = userElem && userElem.getAttribute(EXAM_CORRECT_USER_ATTR); // TODO use other attribute identifier
if (userIdent === user) { if (userIdent === user) {
console.log('response-update', row);
let status = STATUS.FAILURE; let status = STATUS.FAILURE;
switch (response.status) { switch (response.status) {
case 'success': case 'success':
@ -453,11 +429,7 @@ export class ExamCorrect {
setStatus(statusElem, STATUS.LOADING); setStatus(statusElem, STATUS.LOADING);
const body = { const body = this._toRequestBody(listItem.getAttribute(EXAM_CORRECT_USER_ATTR), results.partResults, results.result);
user: listItem.getAttribute(EXAM_CORRECT_USER_ATTR),
results: results.partResults,
grade: { status: results.result },
};
this._app.httpClient.post({ this._app.httpClient.post({
url: EXAM_CORRECT_URL_POST, url: EXAM_CORRECT_URL_POST,
@ -470,7 +442,6 @@ export class ExamCorrect {
} }
_addRow(rowInfo) { _addRow(rowInfo) {
console.log('rowInfo', rowInfo);
// TODO create and use template for this // TODO create and use template for this
const newRow = document.createElement('TR'); const newRow = document.createElement('TR');
newRow.classList.add('table__row'); newRow.classList.add('table__row');
@ -513,7 +484,7 @@ export class ExamCorrect {
const resultCell = document.createElement('TD'); const resultCell = document.createElement('TD');
resultCell.colSpan = 2; resultCell.colSpan = 2;
if (rowInfo.result) if (rowInfo.result)
resultCell.innerHTML = rowInfo.result; resultCell.innerHTML = rowInfo.result === 'attended' ? this._resultGradeSelect.value : rowInfo.result;
cells.set(this._cIndices.get('result'), resultCell); cells.set(this._cIndices.get('result'), resultCell);
const statusCell = document.createElement('TD'); const statusCell = document.createElement('TD');
@ -542,6 +513,40 @@ export class ExamCorrect {
setStatus(this._userInputStatus, STATUS.NONE); setStatus(this._userInputStatus, STATUS.NONE);
} }
_toRequestBody(user, partResults, examResult) {
const body = {
user: user,
};
if (partResults && Object.entries(partResults).length !== 0)
body.results = partResults;
if (examResult) {
switch (examResult) {
case 'none':
break;
case 'delete':
body.grade = null;
break;
case 'attended':
body.grade = { status: examResult, result: { Right: this._resultGradeSelect.value } };
break;
case 'passed':
case 'failed':
body.grade = { status: 'attended', result: { Left: examResult } };
break;
case 'no-show':
case 'voided':
body.grade = { status: examResult };
break;
default:
break; // TODO work in progress
}
}
return body;
}
} }
// TODO move to general util section? // TODO move to general util section?