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!
text 14.58 KB | None | 0 0
  1. /* jslint node: true */
  2. 'use strict'
  3.  
  4. const sequelizeInit = require('./sequelize.js')
  5. const sequelize = sequelizeInit.initSequelize()
  6.  
  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. console.log('linked')
  49.  
  50. // for (let i = 0; i < queueModels.length; i++) {
  51. // queueModels[i].model.belongsTo(Users, { foreignKey: 'student' })
  52. // }
  53. }
  54.  
  55. function fillCache () {
  56. fillUsers()
  57. fillRoles()
  58. fillQueuesAndCourses()
  59. }
  60.  
  61. // fill User fillCache
  62. // works
  63. function fillUsers () {
  64. Users.findAll().then(res => {
  65. for (let user of res) {
  66. // console.log(user.ID, user.name, user.email, user.password)
  67. users.push(new User({
  68. ID: user.ID,
  69. name: user.name,
  70. email: user.email,
  71. password: user.password
  72. })
  73. )
  74. }
  75. })
  76. }
  77.  
  78. // fill roles cache
  79. // works
  80. function fillRoles () {
  81. Roles.findAll().then(res => {
  82. for (let role of res) {
  83. roles.push(new Role(
  84. {
  85. ID: role.ID,
  86. courseID: role.courseID,
  87. role: role.role
  88. })
  89. )
  90. }
  91. })
  92. }
  93.  
  94. function fillQueuesAndCourses () {
  95. Queues.findAll({
  96. include: [
  97. { model: Users },
  98. { model: Courses }
  99. ],
  100. attributes: ['users1.name', 'student', 'task', 'location', 'comment', 'queueNo', 'enterTime', 'courses1.name', 'courses1.ID', 'courses1.open']
  101. }).then(res => {
  102. for (let queue of res) {
  103. // console.log('------this queue query',queue.student, queue.users1.name, queue.task, queue.location, queue.queueNo, queue.enterTime, queue.courses1.name, queue.courses1.ID)
  104. if (courses.some(e => e.ID === queue.courses1.ID)) {
  105.  
  106. } else {
  107. courses.push(new Course({
  108. ID: queue.courses1.ID,
  109. name: queue.courses1.name,
  110. open: queue.courses1.dataValues.open === 1
  111. }))
  112. }
  113.  
  114. // adds students in queue to given course
  115. var queueItem = {
  116. studentID: queue.student,
  117. studentName: queue.users1.name,
  118. task: queue.task,
  119. location: queue.location,
  120. comment: queue.comment,
  121. queueNo: queue.queueNo, // kanske inte behövs
  122. enterTime: queue.enterTime,
  123. receivingHelp: false
  124. }
  125.  
  126. if (queues.some(e => e.ID === queue.courses1.ID)) {
  127. appendToQueue(queue.courses1.ID, queueItem)
  128. } else {
  129. queues.push(new Queue({
  130. ID: queue.courses1.ID,
  131. name: queue.courses1.name,
  132. queue: [queueItem]
  133. }))
  134. }
  135. }
  136. }).catch(error => {
  137. console.error(error)
  138. throw error
  139. })
  140. }
  141.  
  142. function appendToQueue (ID, queueItem) {
  143. for (let i = 0; i < queues.length; i++) {
  144. if (queues[i].ID === ID) {
  145. queues[i].queue.push(queueItem)
  146. console.log(queues[i].queue)
  147. }
  148. }
  149. }
  150. // works
  151. exports.queueLockSwitch = (ID) => {
  152. console.log('in model: courseID is ', ID)
  153. let open = this.getCourse(ID).open
  154.  
  155. if (open === false) {
  156. open = 1
  157. } else {
  158. open = 0
  159. }
  160.  
  161. this.getCourse(ID).open = !this.getCourse(ID).open
  162. // console.log('open',open)
  163.  
  164. Courses.update(
  165. { open: open },
  166. { where: { ID: ID } }
  167. ).catch(err => console.error(err))
  168. // return getCourses();
  169. return this.getCourse(ID).open
  170. }
  171.  
  172. // works
  173. exports.deleteCourse = (ID) => {
  174. console.log('------ID-------', ID)
  175. courses.splice(this.getCourseIndex(ID), 1)
  176.  
  177. Courses.destroy({
  178. where: {
  179. ID: ID
  180. }
  181. }).then(res => {
  182.  
  183. })
  184. }
  185. // works
  186. exports.getCourseIndex = (ID) => {
  187. for (var i = 0; i < courses.length; i++) {
  188. // console.log(courses[i], i)
  189. if (courses[i].ID === ID) {
  190. return i
  191. }
  192. }
  193. return null
  194. }
  195. // works
  196. exports.getCourse = (ID) => {
  197. for (let course of courses) {
  198. if (course.ID === ID) {
  199. return course
  200. }
  201. }
  202. return null
  203. }
  204.  
  205. // exports.getQueues = () => {
  206. // console.log('getting queues in getqueues')
  207. // var queues2 = new Map()
  208. // for (var i = 0; i < courses.length; i++) {
  209. // queues.set(courses[i].ID, queueTemplate)
  210. // };
  211. // return queues
  212. // }
  213.  
  214. exports.getCoursesBelongingTo = (email) => {
  215. console.log('In Model: getcoursesbelonging to: ', email)
  216. let myCourses = []
  217. let userID = this.findIDfromEmail(email)
  218.  
  219. for (let r of roles) {
  220. console.log(r)
  221. if (userID === r.ID) {
  222. if (myCourses.some(e => e.courseID === r.courseID)) {
  223.  
  224. } else {
  225. let currentCourse = this.getCourse(r.courseID)
  226. myCourses.push({
  227. CourseID: currentCourse.ID,
  228. key: currentCourse.name,
  229. open: currentCourse.open,
  230. role: r.role
  231. })
  232. }
  233. }
  234. }
  235.  
  236. return myCourses
  237. }
  238.  
  239. exports.getQueueByCourseID = (ID) => {
  240. for (let q of queues) {
  241. if (q.ID === ID) {
  242. return q
  243. }
  244. }
  245. return null
  246. }
  247.  
  248. // används troligen inte§
  249.  
  250. // exports.getMyCourses = (user, role) => {
  251. // console.log('getting courses by ', user)
  252. // var list = []
  253. // // if role == 0: return the courses in which
  254. // // the student has enqueued
  255. // if (role == 0) {
  256. // this.getQueues().forEach((value, key, map) => {
  257. // for (var i = 0; i < value.length; i++) {
  258. // if (value[i].name === user) {
  259. // list.push(this.getCourse(key))
  260. // console.log('queue: ', key)
  261. // }
  262. // }
  263. // })
  264. // } else {
  265. // // else: return the courses the user has the requested access to
  266. // for (var i = 0; i < roles.length; i++) {
  267. // if (roles[i].name == user) {
  268. // if (roles[i].role <= role) {
  269. // list.push(this.getCourse(roles[i].course_ID))
  270. // }
  271. // }
  272. // }
  273. // }
  274. // console.log(list)
  275. // return list
  276. // }
  277. //
  278. exports.getQueue = (courseID) => {
  279. return this.getQueueByCourseID(courseID)
  280. }
  281.  
  282. exports.getCourses = () => {
  283. return courses
  284. }
  285. // }
  286.  
  287. // works
  288. exports.check = (req) => {
  289. // req = JSON.parse(req)
  290. console.log('checking from model', req.username)
  291.  
  292. for (var i = 0; i < users.length; i++) {
  293. console.log(users[i].email)
  294.  
  295. if (users[i].email === req.username) {
  296. console.log('User found')
  297.  
  298. let userID = this.findIDfromEmail(req.username)
  299.  
  300. if (this.getHighestRole(userID) < req.role) {
  301. console.log('Too low authority')
  302. return null
  303. } else if (users[i].password === req.password) {
  304. console.log('Logged in.')
  305. // return {
  306. // courses: this.getCourses(),
  307. // myCourses: this.getMyCourses(req.username, req.role),
  308. // queues: this.getQueues()
  309. // }
  310. return true
  311. } else {
  312. console.log('Wrong password')
  313. return null
  314. }
  315. }
  316.  
  317. console.log('User not found')
  318. }
  319. return null
  320. }
  321.  
  322. // works
  323. exports.findIDfromEmail = (email) => {
  324. for (let user of users) {
  325. if (user.email === email) {
  326. console.log(user.email, email)
  327. console.log(user.ID)
  328. return user.ID
  329. }
  330. }
  331. }
  332.  
  333. // works
  334. exports.getHighestRole = (userID) => {
  335. let highest = 0
  336. for (let role of roles) {
  337. if (role.ID === userID && role.role > highest) {
  338. highest = role.role
  339. if (highest === 2) {
  340. return highest
  341. }
  342. }
  343. }
  344.  
  345. return highest
  346. }
  347.  
  348. // wroks
  349. exports.updateQueueItem = (courseID, queueItemID) => {
  350. console.log('in model updateQueueItem: ', courseID, queueItemID)
  351. if (queue.ID === courseID) {
  352. for (let student of queue.queue) {
  353. if (student.queueNo === queueItemID) {
  354. console.log('before', student.receivingHelp)
  355. student.receivingHelp = !student.receivingHelp
  356. console.log('after', student.receivingHelp)
  357. break
  358. }
  359. }
  360. }
  361. }
  362.  
  363. // wokrs
  364. exports.removeQueueItem = (courseID, queueItemID) => {
  365. console.log('In model removeQueueItem, received: ', courseID, queueItemID)
  366. console.log('--------queues[0].queue[0]', queues[0].queue[0])
  367. for (let i = 0; i < queues.length; i++) {
  368. console.log('queues[i].ID', queues[i].ID, 'match', courseID)
  369.  
  370. if (queues[i].ID === courseID) {
  371. console.log('courseID matchade!')
  372. console.log('queues[i].length:', queues[i].length)
  373. for (let j = 0; j < queues[i].queue.length; j++) {
  374. console.log('queues[i].queue[j].queueNo', queues[i].queue[j].queueNo, 'match', queueItemID)
  375.  
  376. if (queues[i].queue[j].queueNo == queueItemID) { console.log('queueNo matchade!') }
  377. // console.log(queues[i].queue[j])
  378. console.log('before', queues[i].queue)
  379. queues[i].queue.splice(j, 1)
  380. console.log('afeter', queues[i].queue)
  381.  
  382. Queues.destroy({
  383. where: { courseID: courseID, queueNo: queueItemID }
  384. })
  385. break
  386. }
  387. }
  388. }
  389. }
  390.  
  391. // wroks
  392. exports.createNewCourse = (courseObject) => {
  393. let errorMessage = ''
  394. let success = true
  395. let managers = courseObject.managers.split(',')
  396. for (let i = 0; i < managers.length; i++) {
  397. managers[i] = managers[i].trim()
  398. }
  399. console.log('Received managers: ', managers)
  400. let assistants = courseObject.assistants.split(',')
  401. for (let i = 0; i < assistants.length; i++) {
  402. assistants[i] = assistants[i].trim()
  403. }
  404. console.log('Received assistants: ', assistants)
  405. let confirmedAssistants = []
  406. let confirmedManagers = []
  407.  
  408. for (let i = 0; i < users.length; i++) {
  409. let managerIndex = managers.indexOf(users[i].name)
  410. let assistantIndex = assistants.indexOf(users[i].name)
  411.  
  412. console.log('usersName:', users[i].name)
  413. if (managerIndex != -1) {
  414. confirmedManagers.push(users[i].name)
  415. managers.splice(managerIndex, 1)
  416. }
  417. if (assistantIndex != -1) {
  418. confirmedAssistants.push(users[i].name)
  419. assistants.splice(assistantIndex)
  420. }
  421. }
  422.  
  423. for (let i = 0; i < courses.length; i++) {
  424. if (courses[i].name === courseObject.courseName) {
  425. errorMessage += '\nCourse with name ' + courseObject.courseName + ' already exists.'
  426. success = false
  427. }
  428. if (courses[i].ID === courseObject.courseID) {
  429. errorMessage += '\nCourse with ID ' + courseObject.courseID + ' already exists.'
  430. success = false
  431. }
  432. }
  433.  
  434. if (assistants.length > 0) {
  435. success = false
  436. errorMessage += '\nThe following assistants were not found: ' + assistants
  437. }
  438.  
  439. if (managers.length > 0) {
  440. success = false
  441. errorMessage += '\nThe following managers were not found: ' + managers
  442. }
  443. console.log(errorMessage)
  444. /*
  445. * We have now checked if the course is valID or not.
  446. */
  447.  
  448. if (success) {
  449. courses.push(
  450. {
  451. name: courseObject.courseName,
  452. ID: courseObject.courseID,
  453. open: false
  454. }
  455. )
  456.  
  457. Courses.create({ ID: courseObject.courseID, name: courseObject.courseName, open: 0 }).catch(err => { console.error(err) })
  458.  
  459. for (let asse of confirmedAssistants) {
  460. let ID = findIDofUser(asse)
  461. console.log('assID', ID)
  462. roles.push({
  463. ID: ID,
  464. courseID: courseObject.courseID,
  465. role: 1
  466. })
  467.  
  468. Roles.create({ ID: ID, courseID: courseObject.courseID, role: 1 }).catch(err => { console.error(err) })
  469. }
  470.  
  471. for (let manager of confirmedManagers) {
  472. let ID = findIDofUser(manager)
  473. roles.push({
  474. ID: ID,
  475. courseID: courseObject.courseID,
  476. role: 1
  477. })
  478.  
  479. Roles.create({ ID: ID, courseID: courseObject.courseID, role: 2 }).catch(err => { console.error(err) })
  480. }
  481. }
  482.  
  483. return { success: true }
  484. }
  485.  
  486. function findIndexOfAccount (name) {
  487. console.log('DENNA SKA FÖRSVINNA OCH BYTAS MOT model.findIDofUser(name)')
  488. return this.findIDofUser(name)
  489. }
  490.  
  491. function findIDofUser (name) {
  492. for (let i = 0; i < users.length; i++) {
  493. if (name === users[i].name) {
  494. return users[i].ID
  495. }
  496. }
  497. return -1
  498. }
  499. // works
  500. exports.addQueueItem = (req) => {
  501. console.log('in model, addQueueItem, received ', req)
  502. // req - queueObject{name queue_id request(help present) comment location receivingHelp(bool)} CourseID
  503. /*
  504. * TODO: find the right course using req.courseID
  505. */
  506. // find right queue
  507. for (let queue of queues) {
  508. console.log('-----', queue.ID, req.CourseID)
  509. if (queue.ID === req.CourseID) {
  510. let time = new Date() // date.format(new Date(), 'YYYY/MM/DD HH:mm:ss'),
  511. let studentID = findIDofUser(req.queueObject.name)
  512. let queueItem = {
  513. studentID: studentID,
  514. studentName: req.queueObject.name,
  515. task: req.queueObject.request,
  516. location: req.queueObject.location,
  517. comment: req.queueObject.comment,
  518. queueNo: req.queueObject.queue_id, // kanske inte behövs
  519. enterTime: time,
  520. receivingHelp: false
  521. }
  522.  
  523. Queues.create({
  524. courseID: req.CourseID,
  525. student: studentID,
  526. task: req.queueObject.request,
  527. location: req.queueObject.location,
  528. comment: req.queueObject.comment,
  529. queueNo: req.queueObject.queue_id,
  530. enterTime: time
  531. }).catch(err => console.error(err))
  532. appendToQueue(queue.ID, queueItem)
  533. break
  534. }
  535. }
  536. }
  537. // works
  538. exports.registerNewUser = (userObject) => {
  539. console.log('In model registerNewUser, received ', userObject)
  540. // let ID = 1
  541.  
  542. for (let user of users) {
  543. if (user.name === userObject.username) {
  544. console.log('username already exists')
  545. return false
  546. }
  547. }
  548.  
  549. Users.create({
  550.  
  551. ID: NaN,
  552. name: userObject.username,
  553. email: userObject.email,
  554. password: userObject.password
  555.  
  556. }).then(res => {
  557. users.push(new User({
  558.  
  559. ID: res.ID,
  560. name: res.name,
  561. email: res.email,
  562. password: res.password
  563.  
  564. })
  565. )
  566. console.log(users)
  567. })
  568. return true
  569. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement