Advertisement
Guest User

Untitled

a guest
Mar 13th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.70 KB | None | 0 0
  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. receivingHelp: false
  206. }
  207.  
  208. if (queues.some(e => e.ID === queue.courses1.ID)) {
  209. appendToQueue(queue.courses1.ID, queueItem)
  210. } else {
  211. queues.push(new Queue({
  212. ID: queue.courses1.ID,
  213. name: queue.courses1.name,
  214. queue: [queueItem]
  215. }))
  216. }
  217. }
  218. }).catch(error => {
  219. console.error(error)
  220. throw error
  221. })
  222. }
  223.  
  224. function appendToQueue (ID, queueItem) {
  225. for (let i = 0; i < queues.length; i++) {
  226. if (queues[i].ID === ID) {
  227. queues[i].queue.push(queueItem)
  228. console.log(queues[i].queue)
  229. }
  230. }
  231. }
  232. // works
  233. exports.queueLockSwitch = (ID) => {
  234. console.log('in model: courseID is ', ID)
  235. let open = this.getCourse(ID).open
  236.  
  237. if (open === false) {
  238. open = 1
  239. } else {
  240. open = 0
  241. }
  242.  
  243. this.getCourse(ID).open = !this.getCourse(ID).open
  244. // console.log('open',open)
  245.  
  246. Courses.update(
  247. { open: open },
  248. { where: { ID: ID } }
  249. ).catch(err => console.error(err))
  250. // return getCourses();
  251. return this.getCourse(ID).open
  252. }
  253.  
  254. // works
  255. exports.deleteCourse = (ID) => {
  256. console.log('------ID-------', ID)
  257. courses.splice(this.getCourseIndex(ID), 1)
  258.  
  259. Courses.destroy({
  260. where: {
  261. ID: ID
  262. }
  263. }).then(res => {
  264.  
  265. })
  266. }
  267. // works
  268. exports.getCourseIndex = (ID) => {
  269. for (var i = 0; i < courses.length; i++) {
  270. // console.log(courses[i], i)
  271. if (courses[i].ID === ID) {
  272. return i
  273. }
  274. }
  275. return null
  276. }
  277. // works
  278. exports.getCourse = (ID) => {
  279. for (let course of courses) {
  280. if (course.ID === ID) {
  281. return course
  282. }
  283. }
  284. return null
  285. }
  286.  
  287. // exports.getQueues = () => {
  288. // console.log('getting queues in getqueues')
  289. // var queues2 = new Map()
  290. // for (var i = 0; i < courses.length; i++) {
  291. // queues.set(courses[i].ID, queueTemplate)
  292. // };
  293. // return queues
  294. // }
  295.  
  296. exports.getCoursesBelongingTo = (email) => {
  297. console.log('In Model: getcoursesbelonging to: ', email)
  298. let myCourses = []
  299. let userID = this.findIDfromEmail(email)
  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. let currentCourse = this.getCourse(r.courseID)
  308. myCourses.push({
  309. CourseID: currentCourse.ID,
  310. key: currentCourse.name,
  311. open: currentCourse.open,
  312. role: r.role
  313. })
  314. }
  315. }
  316. }
  317.  
  318. return myCourses
  319. }
  320.  
  321. exports.getQueueByCourseID = (ID) => {
  322. for (let q of queues) {
  323. if (q.ID === ID) {
  324. return q
  325. }
  326. }
  327. return null
  328. }
  329.  
  330. // används troligen inte§
  331.  
  332. // exports.getMyCourses = (user, role) => {
  333. // console.log('getting courses by ', user)
  334. // var list = []
  335. // // if role == 0: return the courses in which
  336. // // the student has enqueued
  337. // if (role == 0) {
  338. // this.getQueues().forEach((value, key, map) => {
  339. // for (var i = 0; i < value.length; i++) {
  340. // if (value[i].name === user) {
  341. // list.push(this.getCourse(key))
  342. // console.log('queue: ', key)
  343. // }
  344. // }
  345. // })
  346. // } else {
  347. // // else: return the courses the user has the requested access to
  348. // for (var i = 0; i < roles.length; i++) {
  349. // if (roles[i].name == user) {
  350. // if (roles[i].role <= role) {
  351. // list.push(this.getCourse(roles[i].course_ID))
  352. // }
  353. // }
  354. // }
  355. // }
  356. // console.log(list)
  357. // return list
  358. // }
  359. //
  360. exports.getQueue = (courseID) => {
  361. return this.getQueueByCourseID(courseID)
  362. }
  363.  
  364. exports.getCourses = () => {
  365. return courses
  366. }
  367. // }
  368.  
  369. // works
  370. exports.check = (req) => {
  371. // req = JSON.parse(req)
  372. console.log('checking from model', req.username)
  373.  
  374. for (var i = 0; i < users.length; i++) {
  375. console.log(users[i].email)
  376.  
  377. if (users[i].email === req.username) {
  378. console.log('User found')
  379.  
  380. let userID = this.findIDfromEmail(req.usersname)
  381.  
  382. if (this.getHighestRole(userID) < req.role) {
  383. console.log('Too low authority')
  384. return null
  385. } else if (users[i].password === req.password) {
  386. console.log('Logged in.')
  387. // return {
  388. // courses: this.getCourses(),
  389. // myCourses: this.getMyCourses(req.username, req.role),
  390. // queues: this.getQueues()
  391. // }
  392. return true
  393. } else {
  394. console.log('Wrong password')
  395. return null
  396. }
  397. }
  398.  
  399. console.log('User not found')
  400. }
  401. return null
  402. }
  403.  
  404. // works
  405. exports.findIDfromEmail = (email) => {
  406. for (let user of users) {
  407. if (user.email === email) {
  408. console.log(user.email, email)
  409. console.log(user.ID)
  410. return user.ID
  411. }
  412. }
  413. }
  414.  
  415. // works
  416. exports.getHighestRole = (userID) => {
  417. let highest = 0
  418. for (let role of roles) {
  419. if (role.ID === userID && role.role > highest) {
  420. highest = role.role
  421. if (highest === 2) {
  422. return highest
  423. }
  424. }
  425. }
  426.  
  427. return highest
  428. }
  429.  
  430. // wroks
  431. exports.updateQueueItem = (courseID, queueItemID) => {
  432. console.log('in model updateQueueItem: ', courseID, queueItemID)
  433. if (queue.ID === courseID) {
  434. for (let student of queue.queue) {
  435. if (student.queueNo === queueItemID) {
  436. console.log('before', student.receivingHelp)
  437. student.receivingHelp = !student.receivingHelp
  438. console.log('after', student.receivingHelp)
  439. break
  440. }
  441. }
  442. }
  443. }
  444.  
  445. // wokrs
  446. exports.removeQueueItem = (courseID, queueItemID) => {
  447. console.log('In model removeQueueItem, received: ', courseID, queueItemID)
  448. console.log('--------queues[0].queue[0]', queues[0].queue[0])
  449. for (let i = 0; i < queues.length; i++) {
  450. console.log('queues[i].ID', queues[i].ID, 'match', courseID)
  451.  
  452. if (queues[i].ID === courseID) {
  453. console.log('courseID matchade!')
  454. console.log('queues[i].length:', queues[i].length)
  455. for (let j = 0; j < queues[i].queue.length; j++) {
  456. console.log('queues[i].queue[j].queueNo', queues[i].queue[j].queueNo, 'match', queueItemID)
  457.  
  458. if (queues[i].queue[j].queueNo == queueItemID) { console.log('queueNo matchade!') }
  459. // console.log(queues[i].queue[j])
  460. console.log('before', queues[i].queue)
  461. queues[i].queue.splice(j, 1)
  462. console.log('afeter', queues[i].queue)
  463.  
  464. Queues.destroy({
  465. where: { courseID: courseID, queueNo: queueItemID }
  466. })
  467. break
  468. }
  469. }
  470. }
  471. }
  472.  
  473. exports.createNewCourse = (courseObject) => {
  474. let errorMessage = ''
  475. let success = true
  476. let managers = courseObject.managers.split(',')
  477. for (let i = 0; i < managers.length; i++) {
  478. managers[i] = managers[i].trim()
  479. }
  480. console.log('Received managers: ', managers)
  481. let assistants = courseObject.assistants.split(',')
  482. for (let i = 0; i < assistants.length; i++) {
  483. assistants[i] = assistants[i].trim()
  484. }
  485. console.log('Received assistants: ', assistants)
  486. let confirmedAssistants = []
  487. let confirmedManagers = []
  488.  
  489. for (let i = 0; i < users.length; i++) {
  490. let managerIndex = managers.indexOf(users[i].name)
  491. let assistantIndex = assistants.indexOf(users[i].name)
  492.  
  493. console.log('usersName:', users[i].name)
  494. if (managerIndex != -1) {
  495. confirmedManagers.push(users[i].name)
  496. managers.splice(managerIndex, 1)
  497. }
  498. if (assistantIndex != -1) {
  499. confirmedAssistants.push(users[i].name)
  500. assistants.splice(assistantIndex)
  501. }
  502. }
  503.  
  504. for (let i = 0; i < courses.length; i++) {
  505. if (courses[i].name === courseObject.courseName) {
  506. errorMessage += '\nCourse with name ' + courseObject.courseName + ' already exists.'
  507. success = false
  508. }
  509. if (courses[i].ID === courseObject.courseID) {
  510. errorMessage += '\nCourse with ID ' + courseObject.courseID + ' already exists.'
  511. success = false
  512. }
  513. }
  514.  
  515. if (assistants.length > 0) {
  516. success = false
  517. errorMessage += '\nThe following assistants were not found: ' + assistants
  518. }
  519.  
  520. if (managers.length > 0) {
  521. success = false
  522. errorMessage += '\nThe following managers were not found: ' + managers
  523. }
  524. console.log(errorMessage)
  525. /*
  526. * We have now checked if the course is valID or not.
  527. */
  528.  
  529. if (success) {
  530. courses.push(
  531. {
  532. name: courseObject.courseName,
  533. ID: courseObject.courseID,
  534. open: false
  535. }
  536. )
  537.  
  538. Courses.create({ ID: courseObject.courseID, name: courseObject.courseName, open: 0 }).catch(err => { console.error(err) })
  539.  
  540. // for (let asse of confirmedAssistants) {
  541. // let index = findIndexOfAccount(asse)
  542. // if (accounts[index].role === 0) {
  543. // accounts[index].role = 1
  544. // }
  545. // roles.push({
  546. // course_ID: courseObject.courseID,
  547. // name: asse,
  548. // role: 1,
  549. // teacher_ID: accounts[index].ID
  550. // })
  551. // }
  552. //
  553. // for (manager of confirmedManagers) {
  554. // let index = findIndexOfAccount(manager)
  555. // if (accounts[index].role < 2) {
  556. // accounts[index].role = 2
  557. // }
  558. // roles.push({
  559. // course_ID: courseObject.courseID,
  560. // name: manager,
  561. // role: 1,
  562. // teacher_ID: accounts[index].ID
  563. // })
  564. // }
  565.  
  566. for (let asse of confirmedAssistants) {
  567. let ID = findIDofUser(asse)
  568. console.log('assID', ID)
  569. roles.push({
  570. ID: ID,
  571. courseID: courseObject.courseID,
  572. role: 1
  573. })
  574.  
  575. Roles.create({ ID: ID, courseID: courseObject.courseID, role: 1 }).catch(err => { console.error(err) })
  576. }
  577.  
  578. for (let manager of confirmedManagers) {
  579. let ID = findIDofUser(manager)
  580. roles.push({
  581. ID: ID,
  582. courseID: courseObject.courseID,
  583. role: 1
  584. })
  585.  
  586. Roles.create({ ID: ID, courseID: courseObject.courseID, role: 2 }).catch(err => { console.error(err) })
  587. }
  588. }
  589.  
  590. /*
  591. for(let i = 0; i < courseObject.managers.length; i++){
  592. if(courseObject[i].)
  593. }
  594. let ID = 0;
  595. */
  596. return { success: true }
  597. }
  598.  
  599. function findIndexOfAccount (name) {
  600. for (let i = 0; i < accounts.length; i++) {
  601. if (name === accounts[i].name) {
  602. return i
  603. }
  604. }
  605. return -1
  606. }
  607.  
  608. function findIDofUser (name) {
  609. for (let i = 0; i < users.length; i++) {
  610. if (name === users[i].name) {
  611. return users[i].ID
  612. }
  613. }
  614. return -1
  615. }
  616.  
  617. // exports.deleteCourse = (ID) => {
  618. // for (let i = 0; i < courses.length; i++) {
  619. // if (courses[i].ID === ID) {
  620. // console.log('in model, deleting course with ID ', ID)
  621. // courses.splice(i, 1)
  622. // break
  623. // }
  624. // }
  625. //
  626. // for (let i = 0; i < roles.length; i++) {
  627. // if (roles[i].course_ID === ID) {
  628. // roles.splice(i, 1)
  629. // }
  630. // }
  631. //
  632. // /*
  633. // * TODO: delete the queue for the course.
  634. // */
  635. // }
  636.  
  637. exports.addQueueItem = (req) => {
  638. console.log('in model, addQueueItem, received ', req)
  639. /*
  640. * TODO: find the right course using req.courseID
  641. */
  642. for (let i = 0; i < queueTemplate.length; i++) {
  643. console.log('Searching: ' + queueTemplate[i].name + ', ' + req.queueObject.name)
  644. if (queueTemplate[i].name == req.queueObject.name) {
  645. console.log('Returning false!')
  646. return false
  647. }
  648. }
  649. queueTemplate.push(req.queueObject)
  650. return true
  651. }
  652.  
  653. exports.registerNewUser = (userObject) => {
  654. console.log('In model registerNewUser, received ', userObject)
  655. let ID = 1
  656. for (let i = 0; i < accounts.length; i++) {
  657. if (accounts[i].name === userObject.username) {
  658. console.log('username already exists')
  659. return false
  660. }
  661. if (accounts[i].ID === ID) {
  662. ID++
  663. }
  664. }
  665. let newUser = {
  666. name: userObject.username,
  667. password: userObject.password,
  668. role: 0,
  669. ID: ID
  670. }
  671. accounts.push(newUser)
  672. console.log('In model, everything successful. accounts is now: ', accounts)
  673. return true
  674. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement