Advertisement
Guest User

Untitled

a guest
Mar 13th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* jslint node: true */
  2. 'use strict'
  3.  
  4. // logged in already?
  5. // const accounts = [
  6. //   { name: 'jeannie', password: '1', role: 0, ID: 21 },
  7. //   { name: 'alex', password: '1', role: 2, ID: 22 },
  8. //   { name: 'gustav', password: '1', role: 2, ID: 23 },
  9. //   { name: 'j', password: 'a', role: 0, ID: 24 },
  10. //   { name: 'e', password: 'b', role: 0, ID: 25 }
  11. // ]
  12. //
  13. // // ID should be autoincremented, open should be false as default
  14. //
  15. // const courses = [
  16. //   { key: 'ADK', ID: 1, open: true },
  17. //   { key: 'IntProg', ID: 2, open: true },
  18. //   { key: 'Maskin', ID: 3, open: true },
  19. //   { key: 'Tilda', ID: 4, open: false },
  20. //   { key: 'Prutten', ID: 5, open: false },
  21. //   { key: 'Språktek', ID: 6, open: false },
  22. //   { key: 'MachineLearning', ID: 7, open: false },
  23. //   { key: 'DeepLearning', ID: 8, open: false }
  24. // ]
  25. //
  26. // var courseMap = new Map()
  27. // for (var i = 0; i < courses.length; i++) {
  28. //   courseMap.set(courses[i].ID, courses[i])
  29. // }
  30. //
  31. // var roles = [
  32. //   { course_ID: 1, name: 'jeannie', teacher_ID: 21, role: 2 },
  33. //   { course_ID: 1, name: 'alex', teacher_ID: 22, role: 1 },
  34. //   { course_ID: 1, name: 'gustav', teacher_ID: 22, role: 1 },
  35. //   { course_ID: 2, name: 'alex', teacher_ID: 22, role: 2 },
  36. //   { course_ID: 2, name: 'alex', teacher_ID: 23, role: 1 },
  37. //   { course_ID: 3, name: 'alex', teacher_ID: 23, role: 2 },
  38. //   { course_ID: 4, name: 'alex', teacher_ID: 23, role: 1 },
  39. //   { course_ID: 5, name: 'alex', teacher_ID: 25, role: 1 },
  40. //   { course_ID: 6, name: 'alex', teacher_ID: 24, role: 2 },
  41. //   { course_ID: 7, name: 'alex', teacher_ID: 22, role: 2 },
  42. //   { course_ID: 8, name: 'alex', teacher_ID: 21, role: 1 }
  43. // ]
  44. //
  45. // // Queue ID should be given by the database automatically in
  46. // // ascending order.
  47. // var queueTemplate = [
  48. //   {
  49. //     name: 'magdalena',
  50. //     queue_ID: 1,
  51. //     request: 'help',
  52. //     comment: 'help lab 2',
  53. //     location: 'red 02',
  54. //     receivingHelp: false
  55. //   },
  56. //   {
  57. //     name: 'alex',
  58. //     queue_ID: 2,
  59. //     request: 'present',
  60. //     comment: 'present lab 24',
  61. //     location: 'magenta 04',
  62. //     receivingHelp: false
  63. //   },
  64. //   {
  65. //     name: 'jeannie',
  66. //     queue_ID: 3,
  67. //     request: 'present',
  68. //     comment: 'presenting all the labs',
  69. //     location: 'yellow 23',
  70. //     receivingHelp: true
  71. //   },
  72. //   {
  73. //     name: 'alexander',
  74. //     request: 'present',
  75. //     comment: 'presenting all the labs',
  76. //     location: 'yellow 25',
  77. //     queue_ID: 4,
  78. //     receivingHelp: true
  79. //   }
  80. // ]
  81. const sequelizeInit = require('./sequelize.js')
  82. const sequelize = sequelizeInit.initSequelize()
  83.  
  84. const User = require('./models/userModel.js')
  85. const Role = require('./models/roleModel.js')
  86. const Course = require('./models/courseModel.js')
  87. const Queue = require('./models/queueModel.js')
  88.  
  89. const fs = require('fs')
  90.  
  91. var Users
  92. var Roles
  93. var StudentStatistics
  94. var CourseStatistics
  95. var Courses
  96. var Queues
  97.  
  98. // contains sequelize models of the queues.
  99. // Dynamic length depending on how many queues (=#courses) we have
  100. const queueModels = []
  101.  
  102. const courses = []
  103. const users = []
  104. const roles = []
  105. const queues = []
  106.  
  107. // creating sequelize models
  108. exports.initDatabase = () => {
  109.   // sequelizeInit.autoSequelize()
  110.   initConstants()
  111. }
  112. function initConstants () {
  113.   Users = sequelize.import('./seq_models/users1.js')
  114.   Roles = sequelize.import('./seq_models/roles1.js')
  115.   StudentStatistics = sequelize.import('./seq_models/studentStatistics1.js')
  116.   CourseStatistics = sequelize.import('./seq_models/courseStatistics1.js')
  117.   Courses = sequelize.import('./seq_models/courses1.js')
  118.   Queues = sequelize.import('./seq_models/queues1.js')
  119.  
  120.   linkModels()
  121.   fillCache()
  122. }
  123.  
  124. function linkModels () {
  125.   Queues.belongsTo(Users, { foreignKey: 'student' })
  126.   Queues.belongsTo(Courses, { foreignKey: 'courseID' })
  127.   console.log('linked')
  128.  
  129.   // for (let i = 0; i < queueModels.length; i++) {
  130.   //   queueModels[i].model.belongsTo(Users, { foreignKey: 'student' })
  131.   // }
  132. }
  133.  
  134. function fillCache () {
  135.   fillUsers()
  136.   fillRoles()
  137.   fillQueuesAndCourses()
  138. }
  139.  
  140. // fill User fillCache
  141. // works
  142. function fillUsers () {
  143.   Users.findAll().then(res => {
  144.     for (let user of res) {
  145.       // console.log(user.ID, user.name, user.email, user.password)
  146.       users.push(new User(
  147.         {
  148.           ID: user.ID,
  149.           name: user.name,
  150.           email: user.email,
  151.           password: user.password
  152.         }
  153.       )
  154.       )
  155.       // console.log(users)
  156.     }
  157.   })
  158. }
  159.  
  160. // fill roles cache
  161. // works
  162. function fillRoles () {
  163.   Roles.findAll().then(res => {
  164.     for (let role of res) {
  165.       roles.push(new Role(
  166.         {
  167.           ID: role.ID,
  168.           courseID: role.courseID,
  169.           role: role.role
  170.         })
  171.       )
  172.     }
  173.   })
  174. }
  175.  
  176. function fillQueuesAndCourses () {
  177.   Queues.findAll({
  178.     include: [
  179.       { model: Users },
  180.       { model: Courses }
  181.     ],
  182.     attributes: ['users1.name', 'student', 'task', 'location', 'comment', 'queueNo', 'enterTime', 'courses1.name', 'courses1.ID', 'courses1.open']
  183.   }).then(res => {
  184.     for (let queue of res) {
  185.       // console.log('------this queue query',queue.student, queue.users1.name, queue.task, queue.location, queue.queueNo, queue.enterTime, queue.courses1.name, queue.courses1.ID)
  186.       if (courses.some(e => e.ID === queue.courses1.ID)) {
  187.  
  188.       } else {
  189.         courses.push(new Course({
  190.           ID: queue.courses1.ID,
  191.           name: queue.courses1.name,
  192.           open: queue.courses1.dataValues.open === 1
  193.         }))
  194.         console.log('course created', courses)
  195.       }
  196.  
  197.       // adds students in queue to given course
  198.       var queueItem = {
  199.         studentID: queue.student,
  200.         studentName: queue.users1.name,
  201.         task: queue.task,
  202.         location: queue.location,
  203.         queueNo: queue.queueNo, // kanske inte behövs
  204.         enterTime: queue.enterTime
  205.       }
  206.  
  207.       if (queues.some(e => e.ID === queue.courses1.ID)) {
  208.         appendToQueue(queue.courses1.ID, queueItem)
  209.       } else {
  210.         queues.push(new Queue({
  211.           ID: queue.courses1.ID,
  212.           name: queue.courses1.name,
  213.           queue: [queueItem]
  214.         }))
  215.       }
  216.     }
  217.   }).catch(error => {
  218.     console.error(error)
  219.     throw error
  220.   })
  221. }
  222.  
  223. function appendToQueue (ID, queueItem) {
  224.   for (let i = 0; i < queues.length; i++) {
  225.     if (queues[i].ID === ID) {
  226.       queues[i].queue.push(queueItem)
  227.       console.log(queues[i].queue)
  228.     }
  229.   }
  230. }
  231. //works
  232. exports.queueLockSwitch = (ID) => {
  233.   console.log('in  model: courseID is ', ID)
  234.    let open = this.getCourse(ID).open
  235.  
  236.    if (open === false){
  237.      open = 1
  238.    } else {
  239.      open = 0
  240.    }
  241.  
  242.    this.getCourse(ID).open = !this.getCourse(ID).open
  243.    // console.log('open',open)
  244.  
  245.   Courses.update(
  246.     {open: open},
  247.     {where: {ID: ID}}
  248.   ).catch(err => console.error(err))
  249.   // return getCourses();
  250.   return this.getCourse(ID).open
  251. }
  252.  
  253. // works
  254. exports.deleteCourse = (ID) => {
  255.   console.log('------ID-------', ID)
  256.   courses.splice(this.getCourseIndex(ID), 1)
  257.  
  258.   Courses.destroy({
  259.     where: {
  260.       ID: ID
  261.     }
  262.   }).then(res => {
  263.  
  264.   })
  265. }
  266. // works
  267. exports.getCourseIndex = (ID) => {
  268.   for (var i = 0; i < courses.length; i++) {
  269.     // console.log(courses[i], i)
  270.     if (courses[i].ID === ID) {
  271.       return i
  272.     }
  273.   }
  274.   return null
  275. }
  276. // works
  277. exports.getCourse = (ID) => {
  278.   for ( let course of courses) {
  279.     if (course.ID === ID){
  280.     return course
  281.     }
  282.   }
  283.   return null
  284. }
  285.  
  286. // exports.getQueues = () => {
  287. //   console.log('getting queues in getqueues')
  288. //   var queues2 = new Map()
  289. //   for (var i = 0; i < courses.length; i++) {
  290. //     queues.set(courses[i].ID, queueTemplate)
  291. //   };
  292. //   return queues
  293. // }
  294.  
  295. exports.getCoursesBelongingTo = (email) => {
  296.   console.log('In Model: getcoursesbelonging to: ', email)
  297.   let myCourses = []
  298.   let userID = this.findIDfromEmail(email)
  299.  
  300.  
  301.   for (let r of roles) {
  302.     console.log(r)
  303.     if (userID === r.ID) {
  304.       if (myCourses.some(e => e.courseID === r.courseID)) {
  305.  
  306.       } else {
  307.  
  308.         let currentCourse = this.getCourse(r.courseID)
  309.         myCourses.push({
  310.           CourseID: currentCourse.ID,
  311.           key: currentCourse.name,
  312.           open: currentCourse.open,
  313.           role: r.role,
  314.         })
  315.         //myCourses.push({course: this.getCourse(r.courseID), level: r.role)
  316.       }
  317.     }
  318.   }
  319.  
  320.   // let myCourses = []
  321.   //
  322.   // for (let courseID of coursIDs) {
  323.   //   // let = index = courseIDs.indexOf(courses[i].ID);
  324.   //   if (courseIDs.indexOf(courses[i].ID) != -1) {
  325.   //     myCourses.push({course: courses[i], level:)
  326.   //   }
  327.   // }
  328.   // console.log('in model: returning ', myCourses.length)
  329.   return myCourses
  330. }
  331.  
  332. exports.getQueueByCourseID = (ID) => {
  333.   for (let q of queues) {
  334.     if (q.ID === ID) {
  335.       return q
  336.     }
  337.   }
  338.   return null
  339. }
  340.  
  341. exports.getMyCourses = (user, role) => {
  342.   console.log('getting courses by ', user)
  343.   var list = []
  344.   // if role == 0: return the courses in which
  345.   // the student has enqueued
  346.   if (role == 0) {
  347.     this.getQueues().forEach((value, key, map) => {
  348.       for (var i = 0; i < value.length; i++) {
  349.         if (value[i].name === user) {
  350.           list.push(this.getCourse(key))
  351.           console.log('queue: ', key)
  352.         }
  353.       }
  354.     })
  355.   } else {
  356.     // else: return the courses the user has the requested access to
  357.     for (var i = 0; i < roles.length; i++) {
  358.       if (roles[i].name == user) {
  359.         if (roles[i].role <= role) {
  360.           list.push(this.getCourse(roles[i].course_ID))
  361.         }
  362.       }
  363.     }
  364.   }
  365.   console.log(list)
  366.   return list
  367. }
  368.  
  369. exports.getQueue = (courseID) => {
  370.   console.log('in getQueue!')
  371.   // console.log('getting ', courseID);
  372.   return this.getQueues().get(courseID)
  373. }
  374.  
  375. exports.getCourses = () => {
  376.   var list = []
  377.   for (var i = 0; i < courses.length; i++) {
  378.     list.push(courses[i])
  379.     console.log('added a course.', courses[i])
  380.   }
  381.   return list
  382. }
  383. // }
  384.  
  385. exports.check = (req) => {
  386.   // req = JSON.parse(req)
  387.   console.log('checking from model', req.username)
  388.  
  389.   for (var i = 0; i < users.length; i++) {
  390.     console.log(users[i].email)
  391.  
  392.     if (users[i].email === req.username) {
  393.       console.log('User found')
  394.  
  395.       let userID = this.findIDfromEmail(req.usersname)
  396.  
  397.  
  398.       if (this.getHighestRole(userID) < req.role) {
  399.         console.log('Too low authority', roleNames[req.role])
  400.         return null
  401.       } else if (users[i].password === req.password) {
  402.         console.log('Logged in.')
  403.         // return {
  404.         //   courses: this.getCourses(),
  405.         //   myCourses: this.getMyCourses(req.username, req.role),
  406.         //   queues: this.getQueues()
  407.         // }
  408.         return true
  409.       } else {
  410.         console.log('Wrong password')
  411.         return null
  412.       }
  413.     }
  414.  
  415.     console.log('User not found')
  416.  
  417.   }
  418.   return null
  419. }
  420.  
  421. exports.findIDfromEmail = (email) => {
  422.   for (let user of users) {
  423.     if( user.email === email) {
  424.       console.log(user.email,email)
  425.       console.log(user.ID)
  426.       return user.ID
  427.     }
  428.   }
  429. }
  430.  
  431. exports.getHighestRole = (userID) => {
  432.   let highest = 0
  433.   for(let role of roles){
  434.     if(role.ID === userID && role.role > highest) {
  435.       highest = role.role
  436.       if(highest === 2) {
  437.         return highest
  438.       }
  439.     }
  440.   }
  441.  
  442.   return highest
  443. }
  444.  
  445. exports.updateQueueItem = (courseID, queueItemID) => {
  446.   console.log('in model updateQueueItem: ', courseID, queueItemID, queueTemplate.length)
  447.   for (let i = 0; i < queueTemplate.length; i++) {
  448.     if (queueTemplate[i].queue_ID === queueItemID) {
  449.       queueTemplate[i].receivingHelp = !queueTemplate[i].receivingHelp
  450.       break
  451.     }
  452.   }
  453. }
  454.  
  455. // DB integrated and cache
  456. exports.removeQueueItem = (courseID, queueItemID) => {
  457.   console.log('In model removeQueueItem, received: ', courseID, queueItemID)
  458.   console.log('--------queues[0].queue[0]', queues[0].queue[0])
  459.   for (let i = 0; i < queues.length; i++) {
  460.     console.log('queues[i].ID', queues[i].ID, 'match', courseID)
  461.  
  462.     if (queues[i].ID === courseID) {
  463.       console.log('courseID matchade!')
  464.       console.log('queues[i].length:', queues[i].length)
  465.       for (let j = 0; j < queues[i].queue.length; j++) {
  466.         console.log('queues[i].queue[j].queueNo', queues[i].queue[j].queueNo, 'match', queueItemID)
  467.  
  468.         if (queues[i].queue[j].queueNo == queueItemID) { console.log('queueNo matchade!') }
  469.         // console.log(queues[i].queue[j])
  470.         console.log('before', queues[i].queue)
  471.         queues[i].queue.splice(j, 1)
  472.         console.log('afeter', queues[i].queue)
  473.  
  474.         Queues.destroy({
  475.           where: { courseID: courseID, queueNo: queueItemID }
  476.         })
  477.         break
  478.       }
  479.     }
  480.   }
  481. }
  482.  
  483. exports.createNewCourse = (courseObject) => {
  484.   let errorMessage = ''
  485.   let success = true
  486.   let managers = courseObject.managers.split(',')
  487.   for (let i =0; i<managers.length;i++) {
  488.     managers[i] = managers[i].trim()
  489.   }
  490.   console.log('Received managers: ', managers)
  491.   let assistants = courseObject.assistants.split(',')
  492.   for (let i =0; i<assistants.length;i++) {
  493.     assistants[i] = assistants[i].trim()
  494.   }
  495.   console.log('Received assistants: ', assistants)
  496.   let confirmedAssistants = []
  497.   let confirmedManagers = []
  498.  
  499.   for (let i = 0; i < users.length; i++) {
  500.     let managerIndex = managers.indexOf(users[i].name)
  501.     let assistantIndex = assistants.indexOf(users[i].name)
  502.  
  503.     console.log('usersName:',users[i].name)
  504.     if (managerIndex != -1) {
  505.       confirmedManagers.push(users[i].name)
  506.       managers.splice(managerIndex, 1)
  507.     }
  508.     if (assistantIndex != -1) {
  509.       confirmedAssistants.push(users[i].name)
  510.       assistants.splice(assistantIndex)
  511.     }
  512.   }
  513.  
  514.  
  515.   for (let i = 0; i < courses.length; i++) {
  516.     if (courses[i].name === courseObject.courseName) {
  517.       errorMessage += '\nCourse with name ' + courseObject.courseName + ' already exists.'
  518.       success = false
  519.     }
  520.     if (courses[i].ID === courseObject.courseID) {
  521.       errorMessage += '\nCourse with ID ' + courseObject.courseID + ' already exists.'
  522.       success = false
  523.     }
  524.   }
  525.  
  526.  
  527.   if (assistants.length > 0) {
  528.     success = false
  529.     errorMessage += '\nThe following assistants were not found: ' + assistants
  530.   }
  531.  
  532.   if (managers.length > 0) {
  533.     success = false
  534.     errorMessage += '\nThe following managers were not found: ' + managers
  535.   }
  536.   console.log(errorMessage)
  537.   /*
  538.      * We have now checked if the course is valID or not.
  539.      */
  540.  
  541.   if (success) {
  542.     courses.push(
  543.       {
  544.         name: courseObject.courseName,
  545.         ID: courseObject.courseID,
  546.         open: false
  547.       }
  548.     )
  549.  
  550.     Courses.create({ID: courseObject.courseID, name: courseObject.courseName, open: 0}).catch(err => {console.error(err)})
  551.  
  552.     // for (let asse of confirmedAssistants) {
  553.     //   let index = findIndexOfAccount(asse)
  554.     //   if (accounts[index].role === 0) {
  555.     //     accounts[index].role = 1
  556.     //   }
  557.     //   roles.push({
  558.     //     course_ID: courseObject.courseID,
  559.     //     name: asse,
  560.     //     role: 1,
  561.     //     teacher_ID: accounts[index].ID
  562.     //   })
  563.     // }
  564.     //
  565.     // for (manager of confirmedManagers) {
  566.     //   let index = findIndexOfAccount(manager)
  567.     //   if (accounts[index].role < 2) {
  568.     //     accounts[index].role = 2
  569.     //   }
  570.     //   roles.push({
  571.     //     course_ID: courseObject.courseID,
  572.     //     name: manager,
  573.     //     role: 1,
  574.     //     teacher_ID: accounts[index].ID
  575.     //   })
  576.     // }
  577.  
  578.     for (let asse of confirmedAssistants) {
  579.       let ID = findIDofUser(asse)
  580.       console.log('assID', ID)
  581.       roles.push({
  582.         ID: ID,
  583.         courseID: courseObject.courseID,
  584.         role: 1
  585.       })
  586.  
  587.       Roles.create({ID: ID, courseID: courseObject.courseID, role: 1}).catch(err => {console.error(err)})
  588.  
  589.     }
  590.  
  591.     for (let manager of confirmedManagers) {
  592.       let ID = findIDofUser(manager)
  593.       roles.push({
  594.         ID: ID,
  595.         courseID: courseObject.courseID,
  596.         role: 1
  597.       })
  598.  
  599.       Roles.create({ID: ID, courseID: courseObject.courseID, role: 2}).catch(err => {console.error(err)})
  600.     }
  601.   }
  602.  
  603.   /*
  604.     for(let i = 0; i < courseObject.managers.length; i++){
  605.         if(courseObject[i].)
  606.     }
  607.     let ID = 0;
  608.     */
  609.   return { success: true }
  610. }
  611.  
  612. function findIndexOfAccount (name) {
  613.   for (let i = 0; i < accounts.length; i++) {
  614.     if (name === accounts[i].name) {
  615.       return i
  616.     }
  617.   }
  618.   return -1
  619. }
  620.  
  621. function findIDofUser (name) {
  622.   for (let i = 0; i < users.length; i++) {
  623.     if (name === users[i].name) {
  624.       return users[i].ID
  625.     }
  626.   }
  627.   return -1
  628. }
  629.  
  630.  
  631.  
  632. // exports.deleteCourse = (ID) => {
  633. //   for (let i = 0; i < courses.length; i++) {
  634. //     if (courses[i].ID === ID) {
  635. //       console.log('in model, deleting course with ID ', ID)
  636. //       courses.splice(i, 1)
  637. //       break
  638. //     }
  639. //   }
  640. //
  641. //   for (let i = 0; i < roles.length; i++) {
  642. //     if (roles[i].course_ID === ID) {
  643. //       roles.splice(i, 1)
  644. //     }
  645. //   }
  646. //
  647. //   /*
  648. //      * TODO: delete the queue for the course.
  649. //      */
  650. // }
  651.  
  652. exports.addQueueItem = (req) => {
  653.   console.log('in model, addQueueItem, received ', req)
  654.   /*
  655.      * TODO: find the right course using req.courseID
  656.      */
  657.   for (let i = 0; i < queueTemplate.length; i++) {
  658.     console.log('Searching: ' + queueTemplate[i].name + ', ' + req.queueObject.name)
  659.     if (queueTemplate[i].name == req.queueObject.name) {
  660.       console.log('Returning false!')
  661.       return false
  662.     }
  663.   }
  664.   queueTemplate.push(req.queueObject)
  665.   return true
  666. }
  667.  
  668. exports.registerNewUser = (userObject) => {
  669.   console.log('In model registerNewUser, received ', userObject)
  670.   let ID = 1
  671.   for (let i = 0; i < accounts.length; i++) {
  672.     if (accounts[i].name === userObject.username) {
  673.       console.log('username already exists')
  674.       return false
  675.     }
  676.     if (accounts[i].ID === ID) {
  677.       ID++
  678.     }
  679.   }
  680.   let newUser = {
  681.     name: userObject.username,
  682.     password: userObject.password,
  683.     role: 0,
  684.     ID: ID
  685.   }
  686.   accounts.push(newUser)
  687.   console.log('In model, everything successful. accounts is now: ', accounts)
  688.   return true
  689. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement