From 98e7b125c4ce63a8bc81c96700a65b7e5be21d40 Mon Sep 17 00:00:00 2001 From: matt Date: Fri, 25 Feb 2022 13:17:07 +0000 Subject: [PATCH] Added User.getTests --- lib/User.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/lib/User.js b/lib/User.js index e099547..2cfa5b7 100644 --- a/lib/User.js +++ b/lib/User.js @@ -5,6 +5,7 @@ const crypto = require('crypto'); const DatabaseConnectionPool = require('./DatabaseConnectionPool'); const PasswordReset = require('./PasswordReset'); +const Test = require('./Test'); class User { id; @@ -108,6 +109,50 @@ class User { req.session.fullName = `${this.firstName} ${this.lastName}`; } + async getTests({ order='desc', range='all' } = {}) { + const validOrder = [ 'asc', 'desc' ]; + const validRange = [ 'all', 'before', 'after' ]; + + if (this.type === 'parent') + throw new Error(`Can not fetch tests for ${this.type}`); + + if (!validOrder.includes(order)) + throw new Error('Invalid order'); + + if (!validRange.includes(range)) + throw new Error('Invalid range'); + + let sql = ` + select + t.* + from + test t + join ${this.type}ClassLink link using(classId) + where + link.${this.type}Id = ? + `; + + switch (range) { + case 'before': + sql += `and t.testDate < CURDATE()`; + break; + case 'after': + sql += `and t.testDate > CURDATE()`; + break; + } + + sql += `order by t.testDate ${order};`; + + const conn = await new DatabaseConnectionPool(); + const tests = await conn.runQuery(sql, [ this.id ]); + + const testObjects = tests.map(test => { + return new Test(test.testId); + }); + + return await Promise.all(testObjects); + } + static async hashPassword(password) { return await bcrypt.hash(password, 10); }