Advertisement
Guest User

Untitled

a guest
Mar 14th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.62 KB | None | 0 0
  1. /* jslint node: true */
  2. 'use strict'
  3.  
  4. const sequelizeInit = require('./sequelize.js')
  5. const sequelize = sequelizeInit.initSequelize()
  6. const bcrypt = require('bcrypt')
  7. // const date = require('date-and-time')
  8.  
  9. const User = require('./models/userModel.js')
  10. const Role = require('./models/roleModel.js')
  11. const Course = require('./models/courseModel.js')
  12. const Queue = require('./models/queueModel.js')
  13.  
  14. const fs = require('fs')
  15.  
  16. var Users
  17. var Roles
  18. var StudentStatistics
  19. var CourseStatistics
  20. var Courses
  21. var Queues
  22.  
  23. const courses = []
  24. const users = []
  25. const roles = []
  26. const queues = []
  27.  
  28. // creating sequelize models
  29. exports.initDatabase = () => {
  30. // sequelizeInit.autoSequelize()
  31. initConstants()
  32. }
  33. function initConstants () {
  34. Users = sequelize.import('./seq_models/users1.js')
  35. Roles = sequelize.import('./seq_models/roles1.js')
  36. StudentStatistics = sequelize.import('./seq_models/studentStatistics1.js')
  37. CourseStatistics = sequelize.import('./seq_models/courseStatistics1.js')
  38. Courses = sequelize.import('./seq_models/courses1.js')
  39. Queues = sequelize.import('./seq_models/queues1.js')
  40.  
  41. linkModels()
  42. fillCache()
  43. }
  44.  
  45. function linkModels () {
  46. Queues.belongsTo(Users, { foreignKey: 'student' })
  47. Queues.belongsTo(Courses, { foreignKey: 'courseID' })
  48. Roles.belongsTo(Users, { foreignKey: 'ID'})
  49. console.log('linked')
  50. }
  51.  
  52. function fillCache () {
  53. fillUsers()
  54. fillRoles()
  55. fillCourses()
  56. fillQueues()
  57. }
  58.  
  59. // fill User fillCache
  60. // works
  61. function fillUsers () {
  62. Users.findAll().then(res => {
  63. for (let user of res) {
  64. users.push(new User({
  65. ID: user.ID,
  66. name: user.name,
  67. email: user.email,
  68. password: user.password
  69. })
  70. )
  71. }
  72. })
  73. }
  74.  
  75. // fill roles cache
  76. // works
  77. function fillRoles () {
  78. Roles.findAll().then(res => {
  79. for (let role of res) {
  80. roles.push(new Role(
  81. {
  82. ID: role.ID,
  83. courseID: role.courseID,
  84. role: role.role
  85. })
  86. )
  87. }
  88. })
  89. }
  90.  
  91. function fillCourses () {
  92. Courses.findAll().then(res => {
  93. for (let course of res) {
  94. courses.push(new Course({
  95. ID: course.ID,
  96. name: course.name,
  97. open: course.dataValues.open === 1
  98. }))
  99.  
  100. queues.push(new Queue({
  101. ID: course.ID,
  102. name: course.name,
  103. queue: [],
  104. open: false
  105. }))
  106. }
  107. })
  108. }
  109.  
  110. function fillQueues () {
  111. Queues.findAll({
  112. include: [
  113. { model: Users },
  114. { model: Courses }
  115. ],
  116.  
  117. }).then(res => {
  118. for (let queue of res) {
  119. // adds students in queue to given course
  120. var queueItem = {
  121. studentID: queue.student,
  122. studentName: queue.users1.name,
  123. task: queue.task,
  124. location: queue.location,
  125. comment: queue.comment,
  126. queueNo: queue.queueNo,
  127. enterTime: new Date(queue.enterTime), // ändrad
  128. receivingHelp: false
  129. }
  130.  
  131. appendToQueue(queue.courses1.ID, queueItem)
  132.  
  133. }
  134. }).catch(error => {
  135. console.error(error)
  136. })
  137. }
  138.  
  139. function appendToQueue (ID, queueItem) {
  140. for (let i = 0; i < queues.length; i++) {
  141. if (queues[i].ID === ID) {
  142. queues[i].queue.push(queueItem)
  143. }
  144. }
  145. }
  146. // works
  147. exports.queueLockSwitch = (ID) => {
  148. let open = this.getCourse(ID).open
  149.  
  150. if (open === false) {
  151. open = 1
  152. } else {
  153. open = 0
  154. }
  155.  
  156. this.getCourse(ID).open = !this.getCourse(ID).open)
  157.  
  158. Courses.update(
  159. { open: open },
  160. { where: { ID: ID } }
  161. ).catch(err => console.error(err))
  162.  
  163. return this.getCourse(ID).open
  164. }
  165.  
  166. // works
  167. exports.deleteCourse = (ID) => {
  168. )
  169. courses.splice(this.getCourseIndex(ID), 1)
  170.  
  171. Courses.destroy({
  172. where: {
  173. ID: ID
  174. }
  175. }).catch(err => {console.error(err)})
  176. }
  177. // works
  178. exports.getCourseIndex = (ID) => {
  179. for (var i = 0; i < courses.length; i++) {
  180. if (courses[i].ID === ID) {
  181. return i
  182. }
  183. }
  184. return null
  185. }
  186. // works
  187. exports.getCourse = (ID) => {
  188.  
  189. for (let course of courses) {
  190. if (course.ID === ID) {
  191. return course
  192. }
  193. }
  194. return null
  195. }
  196.  
  197. exports.getCoursesBelongingTo = (email) => {
  198. console.log('In Model: getcoursesbelonging to: ', email)
  199. let myCourses = []
  200. let userID = this.findIDfromEmail(email)
  201.  
  202. for (let r of roles) {
  203.  
  204. if (userID === r.ID) {
  205.  
  206. if (myCourses.some(e => e.courseID === r.courseID)) {
  207.  
  208. } else {
  209. let currentCourse = this.getCourse(r.courseID)
  210. console.log('currentCourse in model is ', this.getCourse(r.courseID))
  211.  
  212. /*
  213. * bug hotfix. Should only be temporary. currentCourse is currently null
  214. * because it wasn't added properly
  215. */
  216. if (currentCourse != null) {
  217. myCourses.push({
  218. CourseID: currentCourse.ID,
  219. key: currentCourse.name,
  220. open: currentCourse.open,
  221. role: r.role
  222. })
  223. }
  224. }
  225. }
  226. }
  227.  
  228. return myCourses
  229. }
  230.  
  231. exports.getQueueByCourseID = (ID) => {
  232. for (let q of queues) {
  233. if (q.ID === ID) {
  234. return q
  235. }
  236. }
  237. return null
  238. }
  239.  
  240. exports.getQueue = (courseID) => {
  241. return this.getQueueByCourseID(courseID)
  242. }
  243.  
  244. exports.getCourses = () => {
  245. return courses
  246. }
  247.  
  248. exports.check = (req, emit) => {
  249. // req = JSON.parse(req)
  250. console.log('checking from model', req.username)
  251.  
  252. for (let user of users) {
  253.  
  254. if (user.email === req.username) {
  255. console.log('User found')
  256.  
  257. let userID = this.findIDfromEmail(req.username)
  258.  
  259. if (this.getHighestRole(userID) < req.role) {
  260. console.log('Too low authority')
  261. return null
  262. } else {
  263.  
  264. verifyPassword(req.password, user.password, emit)
  265.  
  266. }
  267. }
  268. }
  269. }
  270.  
  271. // works
  272. exports.findIDfromEmail = (email) => {
  273. for (let user of users) {
  274. if (user.email === email) {
  275. return user.ID
  276. }
  277. }
  278. }
  279.  
  280. // works
  281. exports.getHighestRole = (userID) => {
  282. let highest = 0
  283. for (let role of roles) {
  284. if (role.ID === userID && role.role > highest) {
  285. highest = role.role
  286. if (highest === 2) {
  287. return highest
  288. }
  289. }
  290. }
  291.  
  292. return highest
  293. }
  294.  
  295. // wroks
  296. exports.updateQueueItem = (courseID, queueItemID) => {
  297. console.log('in model updateQueueItem: ', courseID, queueItemID)
  298. for (let queue of queues) {
  299. if (queue.ID === courseID) {
  300. for (let student of queue.queue) {
  301. if (student.queueNo === queueItemID) {
  302. student.receivingHelp = !student.receivingHelp
  303. incrementTimesHelped(student.studentID)
  304. break
  305. }
  306. }
  307. }
  308. }
  309. }
  310.  
  311. // wokrs
  312. exports.removeQueueItem = (courseID, queueItemID, studentID, callback) => {
  313.  
  314. for (let i = 0; i < queues.length; i++) {
  315.  
  316. if (queues[i].ID === courseID) {
  317.  
  318. for (let j = 0; j < queues[i].queue.length; j++) {
  319.  
  320. if (queues[i].queue[j].queueNo == queueItemID) {
  321.  
  322. queues[i].queue.splice(j, 1)
  323.  
  324. Queues.destroy({
  325. where: { courseID: courseID, student: studentID }
  326. }).catch(err => {console.error(err)})
  327. break
  328. }
  329. }
  330. }
  331. }
  332. callback(true)
  333. }
  334.  
  335. // OLD belonging to alex
  336.  
  337. exports.createNewCourse = (courseObject, callback) => {
  338. let errorMessage = ''
  339. let success = true
  340. let managers = courseObject.managers.split(',')
  341. for (let i = 0; i < managers.length; i++) {
  342. managers[i] = managers[i].trim()
  343. }
  344.  
  345. let assistants = courseObject.assistants.split(',')
  346. for (let i = 0; i < assistants.length; i++) {
  347. assistants[i] = assistants[i].trim()
  348. })
  349.  
  350. if (assistants.length === 1 && assistants[0] === '') {
  351. assistants = []
  352. console.log('Assistants is empty.')
  353. }
  354. let confirmedAssistants = []
  355. let confirmedManagers = []
  356.  
  357. for (let i = 0; i < users.length; i++) {
  358. let managerIndex = managers.indexOf(users[i].name)
  359. let assistantIndex = assistants.indexOf(users[i].name)
  360.  
  361. console.log('usersName:', users[i].name)
  362. if (managerIndex != -1) {
  363. confirmedManagers.push(users[i].name)
  364. managers.splice(managerIndex, 1)
  365. }
  366. if (assistantIndex != -1) {
  367. confirmedAssistants.push(users[i].name)
  368. assistants.splice(assistantIndex)
  369. }
  370. }
  371.  
  372. for (let i = 0; i < courses.length; i++) {
  373. if (courses[i].name === courseObject.courseName) {
  374. errorMessage += '\nCourse with name ' + courseObject.courseName + ' already exists.'
  375. success = false
  376. }
  377. if (courses[i].ID === courseObject.courseID) {
  378. errorMessage += '\nCourse with ID ' + courseObject.courseID + ' already exists.'
  379. success = false
  380. }
  381. }
  382.  
  383. if (assistants.length > 0) {
  384. success = false
  385. errorMessage += '\nThe following assistants were not found: ' + assistants
  386. }
  387.  
  388. if (managers.length > 0) {
  389. success = false
  390. errorMessage += '\nThe following managers were not found: ' + managers
  391. }
  392. console.log(errorMessage)
  393. console.log('Success? ', success)
  394.  
  395. if (success) {
  396. courses.push(
  397. {
  398. name: courseObject.courseName,
  399. ID: courseObject.courseID,
  400. open: false
  401. }
  402. )
  403.  
  404. Courses.create({
  405. ID: courseObject.courseID,
  406. name: courseObject.courseName,
  407. open: 0
  408. }).then(res => {
  409. CourseStatistics.create({
  410. courseID: res.ID
  411. })
  412. }).catch(err => { console.error(err) })
  413. .catch(err => {console.error(err)})
  414.  
  415. for (let asse of confirmedAssistants) {
  416. let ID = findIDofUser(asse)
  417. )
  418. roles.push({
  419. ID: ID,
  420. courseID: courseObject.courseID,
  421. role: 1
  422. })
  423.  
  424. Roles.create({
  425. ID: ID,
  426. courseID: courseObject.courseID,
  427. role: 1 }).catch(err => { console.error(err) })
  428. }
  429.  
  430. for (let manager of confirmedManagers) {
  431. let ID = findIDofUser(manager)
  432. roles.push({
  433. ID: ID,
  434. courseID: courseObject.courseID,
  435. role: 1
  436. })
  437.  
  438. Roles.create({
  439. ID: ID,
  440. courseID: courseObject.courseID,
  441. role: 2
  442. }).catch(err => { console.error(err) })
  443. }
  444. }
  445.  
  446. callback({ success: success, err: errorMessage })
  447. }
  448.  
  449. //ändrad
  450. // function findIndexOfAccount (name) {
  451. // console.log('DENNA SKA FÖRSVINNA OCH BYTAS MOT model.findIDofUser(name)')
  452. // return this.findIDofUser(name)
  453. // }
  454.  
  455. function findIDofUserByEmail (email) {
  456. for (let i = 0; i < users.length; i++) {
  457. if (email === users[i].email) {
  458. return users[i].ID
  459. }
  460. }
  461. return -1
  462. }
  463. //ändrad likadana
  464. function findIDofUser (email) {
  465. for (let i = 0; i < users.length; i++) {
  466. if (email === users[i].email) {
  467. return users[i].ID
  468. }
  469. }
  470. return -1
  471. }
  472.  
  473. exports.sortQueueByTime = (courseID) => {
  474. let q = this.getQueueByCourseID(courseID)
  475. let sortedQueue = q.queue
  476. result = q.queue.sort(function (a, b) {
  477. new Date(a.time) - new Date(b.time)
  478. })
  479. }
  480.  
  481. exports.addQueueItem = (req, callback) => {
  482. console.log('in model, addQueueItem, received ', req)
  483.  
  484. // find right queue
  485. for (let queue of queues) {
  486.  
  487. if (queue.ID === req.CourseID) {
  488. let time = new Date()
  489.  
  490. let studentID = req.queueObject.studentID
  491. console.log(studentID)
  492.  
  493. // alex saknar
  494.  
  495. Queues.create({
  496. courseID: req.CourseID,
  497. student: studentID,
  498. task: req.queueObject.request,
  499. location: req.queueObject.location,
  500. comment: req.queueObject.comment,
  501. queueNo: null,
  502. enterTime: time
  503. }).then(res => {
  504. let queueItem = {
  505. studentID: studentID,
  506. studentName: req.queueObject.name,
  507. task: res.task, //ändrad
  508. location: res.location,
  509. comment: res.comment,
  510. queueNo: res.queueNo,
  511. enterTime: res.enterTime,
  512. receivingHelp: false
  513. }
  514. appendToQueue(queue.ID, queueItem)
  515. callback({ success: true, queueObject: queueItem })
  516. incrementTimesQueued(res.student, res.courseID)
  517.  
  518. }).catch(err => console.error(err))
  519. break
  520. }
  521. }
  522. }
  523.  
  524. exports.registerNewUser = (userObject, emit) => {
  525. checkAccounts(userObject.username, (success) => {
  526.  
  527. if (success) {
  528. createPasswordHash(userObject.password, userObject.username.length, (hashPassword) => {
  529. Users.create({
  530.  
  531. ID: NaN,
  532. name: userObject.username,
  533. email: userObject.email,
  534. password: hashPassword
  535.  
  536. }).then(res => {
  537. users.push(new User({
  538.  
  539. ID: res.ID,
  540. name: res.name,
  541. email: res.email,
  542. password: res.password
  543.  
  544. })
  545. )
  546. StudentStatistics.create({
  547. ID: res.ID,
  548. totTimeSpentInQueue: new Date('1000-01-01T00:00:00Z')
  549. })
  550. })
  551.  
  552. console.log('Registered new user', users)
  553. emit('Your account is successfully registered')
  554. })
  555. } else {
  556. emit('Failure to register user: Username already taken')
  557. }
  558. })
  559. }
  560.  
  561. function checkAccounts (username, cb) {
  562. let success = true
  563.  
  564. for (let account of users) {
  565. if (account != null) {
  566. if (account.name === username) {
  567. console.log('username already exists')
  568. success = false
  569. }
  570. }
  571. }
  572. console.log('username available')
  573. cb(success)
  574. }
  575.  
  576. function createPasswordHash (plain, saltRound, store) {
  577. bcrypt.genSalt(saltRound).then(salt => {
  578. return bcrypt.hash(plain, salt)
  579. }).then(hash => {
  580. store(hash)
  581. }).catch(err => { console.error(err) })
  582. }
  583.  
  584. function verifyPassword (test, hash, callback) {
  585. bcrypt.compare(test, hash).then(res => {
  586. console.log('verified:', res)
  587. callback(res)
  588. }).catch(err => { console.error(err) })
  589. }
  590.  
  591. exports.editCourse = (request, callback) => {
  592. let errorMessage = ''
  593. let success = true
  594.  
  595. let courseID = request.CourseID
  596.  
  597. if (this.getCourse(courseID) === null) {
  598. success = false
  599. errorMessage = 'Course with id ' + courseID + ' does not exist.'
  600. }
  601.  
  602. let assistants = request.assistants.split(',')
  603. let managers = request.managers.split(',')
  604. for (let i = 0; i < managers.length; i++) {
  605. managers[i] = managers[i].trim()
  606. }
  607. for (let i = 0; i < assistants.length; i++) {
  608. assistants[i] = assistants[i].trim()
  609. }
  610.  
  611. if (managers.length == 1 && managers[0] == '') {
  612. managers = []
  613. success = false
  614. errorMessage += '\nTried removing all managers. Each course needs a manager.'
  615. }
  616. if (assistants.length == 1 && assistants[0] == '') {
  617. assistants = []
  618. }
  619.  
  620. console.log('received managers: ', managers)
  621. console.log('received assistants: ', assistants)
  622.  
  623. if (assistants.length === 1 && assistants[0] === '') {
  624. assistants = []
  625. console.log('Assistants is empty.')
  626. }
  627. let confirmedAssistants = []
  628. let confirmedManagers = []
  629.  
  630. for (let i = 0; i < users.length; i++) {
  631. let managerIndex = managers.indexOf(users[i].email)
  632. let assistantIndex = assistants.indexOf(users[i].email)
  633.  
  634. console.log('userEmail:', users[i].email)
  635. if (managerIndex != -1) {
  636. confirmedManagers.push(users[i].email)
  637. managers.splice(managerIndex, 1)
  638. }
  639. if (assistantIndex != -1) {
  640. confirmedAssistants.push(users[i].email)
  641. assistants.splice(assistantIndex)
  642. }
  643. }
  644.  
  645. if (assistants.length > 0) {
  646. success = false
  647. errorMessage += '\nThe following assistants were not found: ' + assistants
  648. }
  649.  
  650. if (managers.length > 0) {
  651. success = false
  652. errorMessage += '\nThe following managers were not found: ' + managers
  653. }
  654. console.log(errorMessage)
  655. console.log('Success? ', success)
  656. let resultObject = {
  657. success: success,
  658. err: errorMessage
  659. }
  660. callback(resultObject)
  661.  
  662. if (success) {
  663. Users.findAll({
  664. where: {courseID: request.CourseID},
  665. include: {
  666. model: Roles,
  667. where: {
  668. ID: Users.ID
  669. }
  670. },
  671. attributes: ['users1.ID', 'users1.email', 'roles1.role']
  672.  
  673. }).then(res =>{
  674. for (let role of roles) {
  675. for (let email of confirmedAssistants) {
  676. if (email === res.users1.email){
  677. if (res.roles1.role !== 1) {
  678.  
  679. Roles.update({
  680. role: 1,
  681. where: {ID: res.users1.ID}
  682. }).then( () => {
  683. role.role = 1
  684. })
  685. } else {
  686. Roles.create({
  687. ID: res.users1.ID,
  688. courseID: request.CourseID,
  689. role: 1
  690. }).then(res2 => {
  691. roles.push(new Role({
  692. ID: res2.users1.ID,
  693. courseID: request.CourseID,
  694. role: 1
  695. }))
  696. })
  697. }
  698. }
  699. }
  700.  
  701. for (let email of confirmedManagers) {
  702. if (email === res.users1.email){
  703. if (res.roles1.role !== 2) {
  704.  
  705. Roles.update({
  706. role: 2,
  707. where: {ID: res.users1.ID}
  708. }).then( () => {
  709. role.role = 2
  710. })
  711. } else {
  712. Roles.create({
  713. ID: res.users1.ID,
  714. courseID: request.CourseID,
  715. role: 2
  716. }).then(res2 => {
  717. roles.push(new Role({
  718. ID: res2.users1.ID,
  719. courseID: request.CourseID,
  720. role: 2
  721. }))
  722. })
  723. }
  724. }
  725. }
  726. }
  727. }
  728. })
  729. }
  730. }
  731.  
  732. exports.getUserInfoByEmail = (email, callback) => {
  733. for (let user of users) {
  734. if (email.trim() === user.email) {
  735. console.log('found user!', user)
  736. let userObject = {
  737. ID: user.ID,
  738. name: user.name,
  739. email: user.email
  740. }
  741. callback(userObject)
  742. }
  743. }
  744. }
  745.  
  746. exports.checkIfUserInQueue = (courseID, studentID) => {
  747. console.log('check if user in queue in model: ', courseID, studentID)
  748. // let queue = this.getQueueByCourseID(courseID).queue
  749. let queue = this.getQueueByCourseID(courseID).queue
  750. console.log('Checking still: ', queue)
  751. for (let qItem of queue) {
  752. console.log(qItem.studentID, studentID)
  753.  
  754. if (qItem.studentID === studentID) {
  755. console.log('in model checkIfUserInQueue: returning true')
  756. return true
  757. }
  758. }
  759. console.log('in model checkIfUserInQueue: returning false')
  760. return false
  761. }
  762.  
  763. function incrementTimesQueued (studentID, courseID) {
  764. console.log('-----incrementTimesQueued')
  765. StudentStatistics.findOne(
  766. { where: { ID: studentID } }
  767.  
  768. ).then(res => {
  769. StudentStatistics.update(
  770. { noTimesQueued: res.noTimesQueued + 1 },
  771. { where: { ID: studentID } }
  772. ).catch(err => { console.error(err) })
  773. })
  774.  
  775. CourseStatistics.findOne(
  776. { where: { courseID: courseID },
  777. attributes: ['courseID', 'totalQueued']
  778. }
  779.  
  780. ).then(res => {
  781. CourseStatistics.update(
  782. { totalQueued: res.totalQueued + 1 },
  783. { where: { courseID: courseID } }
  784. ).catch(err => { console.error(err) })
  785. })
  786. }
  787.  
  788. function incrementTimesHelped (studentID) {
  789. StudentStatistics.findOne(
  790. { where: { ID: studentID } }
  791.  
  792. ).then(res => {
  793. StudentStatistics.update(
  794. { noTimesHelpRecieved: res.noTimesHelpRecieved + 1 },
  795. { where: { ID: studentID } }
  796. ).catch(err => { console.error(err) })
  797. })
  798. }
  799.  
  800. function incrementTimeSpentInQueues (studentID, courseID, enterTime) {
  801. console.log('----in timeIncrement')
  802. let now = new Date()
  803.  
  804. StudentStatistics.findOne(
  805. { where: { ID: studentID } }
  806.  
  807. ).then(res => {
  808. console.log('STUDENT old time in queue', res.totTimeSpentInQueue)
  809. res.totTimeSpentInQueue.setMilliseconds((now - enterTime))
  810. console.log('STUDENT new time in queue', res.totTimeSpentInQueue)
  811.  
  812. StudentStatistics.update(
  813. { totTimeSpentInQueue: res.totTimeSpentInQueue },
  814. { where: { ID: studentID } }
  815. ).catch(err => { console.error(err) })
  816. }).catch(err => { console.error(err) })
  817.  
  818. CourseStatistics.findOne(
  819. {
  820. where: { courseID: courseID },
  821. attributes: ['TotalQueueTime']
  822. }
  823. ).then(res => {
  824.  
  825.  
  826. res.TotalQueueTime.setMilliseconds((now - enterTime))
  827.  
  828.  
  829.  
  830. CourseStatistics.update(
  831. { TotalQueueTime: res.TotalQueueTime },
  832. { where: { courseID: courseID } }
  833. )
  834. })
  835. }
  836. exports.addStudentToStatistics = (i) => {
  837. StudentStatistics.create({
  838. ID: i
  839. })
  840. }
  841.  
  842. exports.addRecievedHelp = (studentID) => {
  843. StudentStatistics.findOne({
  844. where: { ID: studentID }
  845. }).then(res => {
  846. StudentStatistics.update(
  847. { noTimesHelpRecieved: res.noTimesHelpRecieved + 1 }
  848. )
  849. })
  850. }
  851. exports.getStudentStatistics = (studentID) => {
  852. StudentStatistics.findOne({
  853. where: { ID: studentID }
  854. }).then(res => {
  855. let avgTime = convertTime(((res.totTimeSpentInQueue.getTime() - (new Date('1000-01-01T00:00:00Z')).getTime()) / (res.noTimesQueued)))
  856.  
  857. let stats = new Map()
  858. stats.set('totQueued', res.noTimesQueued)
  859. stats.set('noTimesHelpRecieved', res.noTimesHelpRecieved)
  860. stats.set('avgTime', avgTime)
  861.  
  862. return stats
  863. })
  864. }
  865.  
  866. exports.getCourseStatistics = (courseID) => {
  867. CourseStatistics.findOne({
  868. where: { courseID: courseID }
  869. }).then(res => {
  870. let avgTime = convertTime(((res.TotalQueueTime.getTime() - (new Date('1000-01-01T00:00:00Z')).getTime()) / (res.totalQueued)))
  871.  
  872. let stats = new Map()
  873. stats.set('totQueued', res.totalQueued)
  874. stats.set('avgTime', avgTime)
  875.  
  876. return stats
  877. })
  878. }
  879.  
  880. function convertTime (milliseconds) {
  881. var h, m, s
  882. s = Math.floor(milliseconds / 1000)
  883. m = Math.floor(s / 60)
  884. s = s % 60
  885. h = Math.floor(m / 60)
  886. m = m % 60
  887.  
  888. console.log('STUDENT AVGTIME', [h, m, s])
  889. return [h, m, s]
  890. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement