mirror of
https://github.com/matt-fidd/stratos.git
synced 2026-01-01 22:59:28 +00:00
144 lines
2.3 KiB
JavaScript
144 lines
2.3 KiB
JavaScript
/* eslint-disable no-empty-function, getter-return */
|
|
'use strict';
|
|
|
|
const crypto = require('crypto');
|
|
|
|
// Import user defined modules
|
|
const Class = require('./Class');
|
|
const Test = require('./Test');
|
|
|
|
/**
|
|
* A class that represents a test template
|
|
*/
|
|
class TestTemplate {
|
|
/**
|
|
* The id of the test template
|
|
* @type {string}
|
|
*/
|
|
id;
|
|
|
|
/**
|
|
* The id of the account that created it
|
|
* @type {string}
|
|
*/
|
|
accountId;
|
|
|
|
/**
|
|
* The account that created it
|
|
* @type {Account}
|
|
*/
|
|
account;
|
|
|
|
/**
|
|
* The name of the test template
|
|
* @type {string}
|
|
*/
|
|
name;
|
|
|
|
/**
|
|
* The maximum mark of the test template
|
|
* @type {number}
|
|
*/
|
|
maxMark;
|
|
|
|
#conn;
|
|
|
|
/**
|
|
* @param {string} testTemplateId - The id of the template to fetch
|
|
*/
|
|
constructor(conn, testTemplateId) {
|
|
this.#conn = conn;
|
|
|
|
const sql = `
|
|
select
|
|
testTemplateId as id,
|
|
accountId,
|
|
name,
|
|
maxMark
|
|
from
|
|
testTemplate
|
|
where
|
|
testTemplateId = ?;
|
|
`;
|
|
|
|
return (async () => {
|
|
const record = await this.#conn.runQuery(sql, [
|
|
testTemplateId,
|
|
]);
|
|
|
|
if (!record.length)
|
|
throw new Error('No test template found');
|
|
|
|
for (const [ k, v ] of Object.entries(record[0]))
|
|
this[k] = v;
|
|
|
|
this.account = await this.getAccount();
|
|
|
|
return this;
|
|
})();
|
|
}
|
|
|
|
getAccount() {
|
|
return new (require('./Account'))(this.#conn, this.accountId);
|
|
}
|
|
|
|
async assignClass(classId, date) {
|
|
const c = await new Class(this.#conn, classId);
|
|
const id = crypto.randomUUID();
|
|
const epochDate = date.getTime() / 1000;
|
|
|
|
const sql = `
|
|
insert into test(
|
|
testId,
|
|
testTemplateId,
|
|
classId,
|
|
testDate)
|
|
values
|
|
(?, ?, ?, FROM_UNIXTIME(?));
|
|
`;
|
|
|
|
await this.#conn.runQuery(sql, [
|
|
id,
|
|
this.id,
|
|
c.id,
|
|
epochDate
|
|
]);
|
|
|
|
return new Test(this.#conn, id);
|
|
}
|
|
|
|
get classes() {
|
|
|
|
}
|
|
|
|
static async createTestTemplate(conn, accountId, name, maxMark) {
|
|
const a = await new (require('./Account'))(conn, accountId);
|
|
|
|
const id = crypto.randomUUID();
|
|
|
|
const sql = `
|
|
insert into testTemplate(
|
|
testTemplateId,
|
|
accountId,
|
|
name,
|
|
maxMark)
|
|
values
|
|
(?, ?, ?, ?);
|
|
`;
|
|
|
|
const result = await conn.runQuery(sql, [
|
|
id,
|
|
a.id,
|
|
name,
|
|
maxMark
|
|
]);
|
|
|
|
if (!result)
|
|
throw new Error('Could not create test template');
|
|
|
|
return new TestTemplate(conn, id);
|
|
}
|
|
}
|
|
|
|
module.exports = TestTemplate;
|