Advertisement
Guest User

Untitled

a guest
Mar 12th, 2019
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* jslint node: true */
  2. 'use strict'
  3. const accounts = [
  4.   { name: 'jeannie', password: '1', role: 0, id: 21 },
  5.   { name: 'alex', password: '1', role: 2, id: 22 },
  6.   { name: 'gustav', password: '1', role: 2, id: 23 },
  7.   { name: 'j', password: 'a', role: 0, id: 24 },
  8.   { name: 'e', password: 'b', role: 0, id: 25 }
  9. ]
  10.  
  11. const roleNames = ['Student', 'Assistant', 'Course Manager']
  12. // id should be autoincremented, open should be false as default
  13.  
  14. const courses = [
  15.   { key: 'ADK', id: 1, open: true },
  16.   { key: 'IntProg', id: 2, open: true },
  17.   { key: 'Maskin', id: 3, open: true },
  18.   { key: 'Tilda', id: 4, open: false },
  19.   { key: 'Prutten', id: 5, open: false },
  20.   { key: 'Språktek', id: 6, open: false },
  21.   { key: 'MachineLearning', id: 7, open: false },
  22.   { key: 'DeepLearning', id: 8, open: false }
  23. ]
  24.  
  25. var roles = [
  26.   { course_id: 1, name: 'jeannie', teacher_id: 21, role: 2 },
  27.   { course_id: 1, name: 'alex', teacher_id: 22, role: 1 },
  28.   { course_id: 1, name: 'gustav', teacher_id: 22, role: 1 },
  29.   { course_id: 2, name: 'alex', teacher_id: 22, role: 2 },
  30.   { course_id: 2, name: 'alex', teacher_id: 23, role: 1 },
  31.   { course_id: 3, name: 'alex', teacher_id: 23, role: 2 },
  32.   { course_id: 4, name: 'alex', teacher_id: 23, role: 1 },
  33.   { course_id: 5, name: 'alex', teacher_id: 25, role: 1 },
  34.   { course_id: 6, name: 'alex', teacher_id: 24, role: 2 },
  35.   { course_id: 7, name: 'alex', teacher_id: 22, role: 2 },
  36.   { course_id: 8, name: 'alex', teacher_id: 21, role: 1 }
  37. ]
  38.  
  39.  
  40. // Queue id should be given by the database automatically in
  41. // ascending order.
  42. var queueTemplate = [
  43.   {
  44.     name: 'magdalena',
  45.     queue_id: 1,
  46.     request: 'help',
  47.     comment: 'help lab 2',
  48.     location: 'red 02',
  49.     receivingHelp: false
  50.   },
  51.   {
  52.     name: 'alex',
  53.     queue_id: 2,
  54.     request: 'present',
  55.     comment: 'present lab 24',
  56.     location: 'magenta 04',
  57.     receivingHelp: false
  58.   },
  59.   {
  60.     name: 'jeannie',
  61.     queue_id: 3,
  62.     request: 'present',
  63.     comment: 'presenting all the labs',
  64.     location: 'yellow 23',
  65.     receivingHelp: true
  66.   },
  67.   {
  68.     name: 'alexander',
  69.     request: 'present',
  70.     comment: 'presenting all the labs',
  71.     location: 'yellow 25',
  72.     queue_id: 4,
  73.     receivingHelp: true
  74.   }
  75. ]
  76.  
  77. exports.queueLockSwitch = (id) => {
  78.  
  79.   console.log('in  model: courseid is ', id);
  80.   this.getCourse(id).open = !this.getCourse(id).open;
  81.   // return getCourses();
  82.   return this.getCourse(id).open;
  83. }
  84.  
  85. exports.deleteCourse = (id) => {
  86.   console.log(id);
  87.   courses.splice(this.getCourseIndex(id), 1);
  88.   //return courses;
  89. }
  90.  
  91. exports.getCourseIndex = (id) => {
  92.   for (var i = 0; i < courses.length; i++){
  93.     console.log(courses[i], i);
  94.     if (courses[i].id == id){
  95.       return i;
  96.     }
  97.   }
  98.   return null;
  99. }
  100.  
  101. exports.getCourse = (id) => {
  102.     return courses[this.getCourseIndex(id)];
  103. }
  104.  
  105. exports.getQueues = () => {
  106.   console.log('getting queues in getqueues')
  107.   var queues = new Map()
  108.   for (var i = 0; i < courses.length; i++) {
  109.     queues.set(courses[i].id, queueTemplate)
  110.   };
  111.   return queues
  112. }
  113.  
  114. exports.getCoursesBelongingTo = (id) => {
  115.     console.log('In Model: getcoursesbelonging to: ', id);
  116.     let courseIDs = [];
  117.     for(let i = 0; i < roles.length; i++){
  118.         if(roles[i].name === id){
  119.             courseIDs.push(roles[i].course_id);
  120.         }
  121.     }
  122.  
  123.     let myCourses = [];
  124.  
  125.     for(let i = 0; i < courses.length; i++){
  126.         //let = index = courseIDs.indexOf(courses[i].id);
  127.         if(courseIDs.indexOf(courses[i].id) != -1){
  128.             myCourses.push(courses[i]);
  129.         }
  130.     }
  131.     console.log("in model: returning ", myCourses.length);
  132.     return myCourses;
  133. }
  134.  
  135. exports.getMyCourses = (user, role) => {
  136.   console.log('getting courses by ', user)
  137.   var list = []
  138.   // if role == 0: return the courses in which
  139.   // the student has enqueued
  140.   if (role == 0) {
  141.     this.getQueues().forEach((value, key, map) => {
  142.       for (var i = 0; i < value.length; i++) {
  143.         if (value[i].name === user) {
  144.           list.push(this.getCourse(key))
  145.           console.log('queue: ',key)
  146.         }
  147.       }
  148.     })
  149.  
  150.   } else {
  151.     // else: return the courses the user has the requested access to
  152.     for (var i = 0; i < roles.length; i++) {
  153.       if (roles[i].name == user) {
  154.         if (roles[i].role <= role) {
  155.           list.push(this.getCourse(roles[i].course_id))
  156.         }
  157.       }
  158.     }
  159.   }
  160.   console.log(list)
  161.   return list
  162. }
  163.  
  164. exports.getQueue = (courseID) => {
  165.   console.log('in getQueue!')
  166.   // console.log('getting ', courseID);
  167.   return this.getQueues().get(courseID)
  168. }
  169.  
  170. exports.getCourses = () => {
  171.   var list = []
  172.   for (var i = 0; i < courses.length; i++) {
  173.     list.push(courses[i])
  174.     console.log('added a course.', courses[i])
  175.   }
  176.   return list
  177. }
  178. }
  179.  
  180. exports.check = (req) => {
  181.   req = JSON.parse(req)
  182.   console.log('checking from model', req.username)
  183.  
  184.   for (var i = 0; i < accounts.length; i++) {
  185.     console.log(accounts[i].name)
  186.     if (accounts[i].name == req.username) {
  187.       console.log('User found')
  188.       if (accounts[i].role < req.role) {
  189.         console.log('Too low authority', roleNames[req.role])
  190.         return null
  191.       } else if (accounts[i].password == req.password) {
  192.         console.log('Logged in.')
  193.         return {
  194.           courses: this.getCourses(),
  195.           myCourses: this.getMyCourses(req.username, req.role),
  196.           queues: this.getQueues()
  197.       } else {
  198.         console.log('Wrong password')
  199.         return null
  200.       }
  201.     }
  202.   }
  203.  
  204.   console.log('User not found')
  205.   return null
  206. }
  207.  
  208. exports.updateQueueItem = (courseID, queueItemID) => {
  209.   console.log('in model updateQueueItem: ', courseID, queueItemID, queueTemplate.length)
  210.   for (let i = 0; i < queueTemplate.length; i++) {
  211.     if (queueTemplate[i].queue_id === queueItemID) {
  212.       queueTemplate[i].receivingHelp = !queueTemplate[i].receivingHelp
  213.       break;
  214.     }
  215.   }
  216. }
  217.  
  218. exports.removeQueueItem = (courseID, queueItemID) => {
  219.     console.log("In model removeQueueItem, received: ", courseID, queueItemID);
  220.     for (let i = 0; i < queueTemplate.length; i++){
  221.         if (queueTemplate[i].queue_id === queueItemID) {
  222.             queueTemplate.splice(i, 1);
  223.         }
  224.     }
  225. }
  226.  
  227. exports.createNewCourse = (courseObject) => {
  228.     let errorMessage = "";
  229.     let success = true;
  230.     let managers = courseObject.managers.split(',');
  231.     for(manager of managers){
  232.         manager.trim();
  233.     }
  234.     console.log("Received managers: ", managers);
  235.     let assistants = courseObject.assistants.split(',');
  236.     for(asse of assistants){
  237.         asse.trim();
  238.     }
  239.     console.log("Received assistants: ", assistants);
  240.     let confirmedAssistants = [];
  241.     let confirmedManagers = [];
  242.     for(let i = 0; i < accounts.length; i++){
  243.         let managerIndex = managers.indexOf(accounts[i].name);
  244.         let assistantIndex = assistants.indexOf(accounts[i].name);
  245.         if(managerIndex != -1){
  246.             confirmedManagers.push(accounts[i].name);
  247.             managers.splice(managerIndex, 1);
  248.         }
  249.         if(assistantIndex != -1){
  250.             confirmedAssistants.push(accounts[i].name);
  251.             assistants.splice(assistantIndex);
  252.         }
  253.     }
  254.  
  255.     for(let i = 0; i < courses.length; i++){
  256.         if(courses[i].key === courseObject.courseName){
  257.             errorMessage += "\nCourse with name " + courseObject.courseName + " already exists.";
  258.             success = false;
  259.         }
  260.         if(courses[i].id === courseObject.courseID){
  261.             errorMessage += '\nCourse with id ' + courseObject.courseID + ' already exists.';
  262.             success = false;
  263.         }
  264.  
  265.     }
  266.  
  267.     if(assistants.length > 0){
  268.         success = false;
  269.         errorMessage += '\nThe following assistants were not found: ' + assistants;
  270.     }
  271.  
  272.     if(managers.length > 0){
  273.         success = false;
  274.         errorMessage += '\nThe following managers were not found: ' + managers;
  275.     }
  276.  
  277.     /*
  278.      * We have now checked if the course is valid or not.
  279.      */
  280.  
  281.     if(success){
  282.         courses.push(
  283.             {
  284.                 key: courseObject.courseName,
  285.                 id: courseObject.courseID,
  286.                 open: false,
  287.             }
  288.         );
  289.  
  290.         for(asse of confirmedAssistants){
  291.             let index = findIndexOfAccount(asse);
  292.             if(accounts[index].role === 0){
  293.                 accounts[index].role = 1;
  294.             }
  295.             roles.push({
  296.                 course_id: courseObject.courseID,
  297.                 name: asse,
  298.                 role: 1,
  299.                 teacher_id: accounts[index].id,
  300.             });
  301.         }
  302.  
  303.         for(manager of confirmedManagers){
  304.             let index = findIndexOfAccount(manager);
  305.             if(accounts[index].role < 2){
  306.                 accounts[index].role = 2;
  307.             }
  308.             roles.push({
  309.                 course_id: courseObject.courseID,
  310.                 name: manager,
  311.                 role: 1,
  312.                 teacher_id: accounts[index].id,
  313.             });
  314.         }
  315.     }
  316.  
  317.     /*
  318.     for(let i = 0; i < courseObject.managers.length; i++){
  319.         if(courseObject[i].)
  320.     }
  321.     let id = 0;
  322.     */
  323.     return {success: true};
  324. }
  325.  
  326. function findIndexOfAccount(name){
  327.     for(let i = 0; i < accounts.length; i++){
  328.         if(name === accounts[i].name){
  329.             return i;
  330.         }
  331.     }
  332.     return -1;
  333. }
  334.  
  335. exports.addNewCourse = (courseObject) => {
  336.     let id = 0;
  337.     for(let i = 0; i < courses.length; i++){
  338.         if(courseObject.course.key === courses[i].key){
  339.             return false;
  340.         }
  341.         if(courses[i].id === id){
  342.             id++;
  343.         }
  344.     }
  345.     courseObject.course.id = id;
  346.     courses.push(courseObject.course);
  347.     for(let i = 0; i < courseObject.roles.length; i++){
  348.         courseObject.roles[i].course_id = id;
  349.         roles.push(courseObject.roles[i]);
  350.         /*
  351.          * Update privilege of asse
  352.          */
  353.          for(let j = 0; j < accounts.length; j++){
  354.              if(courseObject.roles[i].name === accounts[j].name){
  355.                  if(courseObject.roles[i].role > accounts[j].role){
  356.                      accounts[j].role = courseObject.roles[i].role;
  357.                  }
  358.              }
  359.          }
  360.     }
  361.  
  362.     return true;
  363.  
  364. }
  365.  
  366. exports.deleteCourse = (id) => {
  367.     for(let i = 0; i < courses.length; i++){
  368.         if(courses[i].id === id){
  369.             console.log("in model, deleting course with id ", id);
  370.             courses.splice(i, 1);
  371.             break;
  372.         }
  373.     }
  374.  
  375.     for(let i = 0; i < roles.length; i++){
  376.         if(roles[i].course_id === id){
  377.             roles.splice(i, 1);
  378.         }
  379.     }
  380.  
  381.     /*
  382.      * TODO: delete the queue for the course.
  383.      */
  384. }
  385.  
  386. exports.addQueueItem = (req) => {
  387.     console.log("in model, addQueueItem, received ", req);
  388.     /*
  389.      * TODO: find the right course using req.CourseID
  390.      */
  391.     for(let i = 0; i < queueTemplate.length; i++){
  392.         console.log("Searching: " + queueTemplate[i].name + ", " + req.queueObject.name);
  393.         if(queueTemplate[i].name == req.queueObject.name){
  394.             console.log("Returning false!");
  395.             return false;
  396.         }
  397.     }
  398.     queueTemplate.push(req.queueObject);
  399.     return true;
  400. }
  401.  
  402. exports.registerNewUser = (userObject) => {
  403.     console.log("In model registerNewUser, received ", userObject);
  404.     let id = 1;
  405.     for(let i = 0; i < accounts.length; i++){
  406.         if(accounts[i].name === userObject.username){
  407.             console.log("username already exists");
  408.             return false;
  409.         }
  410.         if(accounts[i].id === id){
  411.             id++;
  412.         }
  413.     }
  414.     let newUser = {
  415.         name: userObject.username,
  416.         password: userObject.password,
  417.         role: 0,
  418.         id: id,
  419.     }
  420.     accounts.push(newUser);
  421.     console.log("In model, everything successful. accounts is now: ", accounts);
  422.     return true;
  423. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement