'use strict'; class Subject { /** * The id of the subject * @type {number} */ id; /** * The name of the subject * @type {string} */ name; #conn; /** * @param {number} subjectID - The id of the subject to fetch */ constructor(conn, subjectId) { this.#conn = conn; const sql = ` select subjectId as id, name from subject where subjectId = ?; `; return (async () => { const record = await this.#conn.runQuery(sql, [ subjectId, ]); if (!record.length) throw new Error('No subject found'); for (const [ k, v ] of Object.entries(record[0])) this[k] = v; return this; })(); } static async getAllSubjects(conn) { const sql = ` select subjectId as id from subject; `; const records = await conn.runQuery(sql); const objectPromises = []; records.forEach(record => { objectPromises.push(new Subject(conn, record.id)); }); const objects = await Promise.all(objectPromises); return objects; } } module.exports = Subject;