learn.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. const Uploader = require("../models/uploader.js");
  2. const Course = require("../models/course.js");
  3. const Lecture = require("../models/lecture.js");
  4. const createId = require("./createId.js");
  5. module.exports = {
  6. /*
  7. POST: create a new course
  8. req.body = {
  9. uploaderId: String,
  10. password: String,
  11. title: String
  12. thumbNail: String,
  13. description: String
  14. }
  15. redirect to home
  16. */
  17. createCourse: function(req, res){
  18. Uploader.findOne({_id: req.body.uploaderId})
  19. .then((uploader)=>{
  20. if(uploader === null) throw "uploader";
  21. if(req.body.password !== uploader.password) throw "pass";
  22. let imgString = `/thumbNails/${req.files.thumbNail.name}`;
  23. req.files.thumbNail.mv(`${__dirname}/..${imgString}`);
  24. let course = new Course({
  25. owner: uploader._id,
  26. title: req.body.title,
  27. thumbNail: imgString,
  28. description: req.body.description
  29. });
  30. return course.save();
  31. })
  32. .then((course)=>{
  33. return res.redirect("/");
  34. })
  35. .catch((err)=>{
  36. if(err === "uploader") return res.json("Uploader doesn't exist");
  37. if(err === "pass") return res.json("Incorrect password");
  38. return res.json("Something went wrong on the backend");
  39. });
  40. },
  41. /*
  42. POST: create a new lecture
  43. req.body = {
  44. uploader: String
  45. password: String
  46. course: String
  47. title: String
  48. video: String
  49. description: String
  50. furtherReading: [{
  51. text: String
  52. link: String
  53. }]
  54. exercises: [String]
  55. documents: [{
  56. title: String
  57. link: String
  58. }]
  59. }
  60. redirects to home
  61. */
  62. createLecture: function(req, res){
  63. Course.findOne({_id: req.body.course})
  64. .populate("owner")
  65. .then((course)=>{
  66. if(course === null) throw "noCourse";
  67. if(req.body.uploader !== course.owner._id.toString()) throw "badOwner";
  68. if(req.body.password !== course.owner.password) throw "badPass";
  69. let exercises = [];
  70. if(req.body.exercises !== "~"){
  71. exercises = req.body.exercises.split("~");
  72. exercises.splice(exercises.length - 1, 1);
  73. }
  74. let furtherReading = req.body.furtherReading.split("\r\n");
  75. furtherReading.splice(furtherReading.length-1, 1);
  76. let readings = [];
  77. for(let i = 0; i < furtherReading.length; i+=2){
  78. readings.push({
  79. text: furtherReading[i],
  80. link: furtherReading[i+1]
  81. });
  82. }
  83. let lecture = new Lecture({
  84. course: course._id,
  85. title: req.body.title,
  86. video: req.body.video,
  87. description: req.body.description,
  88. furtherReading: readings,
  89. exercises: exercises,
  90. documents: []
  91. });
  92. if(req.files !== null){
  93. let files = req.files.documents;
  94. if(files.length === undefined){
  95. let fileId = createId(25);
  96. let fileParts = files.name.split(".");
  97. let fileString = `/documents/${fileId}.${fileParts[1]}`;
  98. files.mv(`${__dirname}/..${fileString}`);
  99. lecture.documents.push({
  100. name: fileParts[0],
  101. link: fileString
  102. })
  103. }else{
  104. for(let i = 0; i < files.length; i++){
  105. let fileId = createId(25);
  106. let fileParts = files[i].name.split(".");
  107. let fileString = `/documents/${fileId}.${fileParts[1]}`;
  108. files[i].mv(`${__dirname}/..${fileString}`);
  109. lecture.documents.push({
  110. name: fileParts[0],
  111. link: fileString
  112. });
  113. }
  114. }
  115. }
  116. return lecture.save();
  117. })
  118. .then((lecture)=>{
  119. return res.redirect("/");
  120. })
  121. .catch((err)=>{
  122. if(err === "noCourse") return res.json("Course does not exist");
  123. if(err === "badOwner") return res.json("You do not own this course");
  124. if(err === "badPass") return res.json("Incorrect password");
  125. return res.redirect("/");
  126. });
  127. },
  128. getCourses: function(req, res){
  129. Course.find()
  130. .then((courses)=>{
  131. return res.json(courses);
  132. })
  133. .catch((err)=>{
  134. return res.json("Could not retrieve courses");
  135. });
  136. },
  137. /*
  138. GET: get a list of lectures from a course
  139. req.params.id = String (course id)
  140. response = {
  141. course: Course,
  142. lectures: [Lecture]
  143. }
  144. */
  145. getLectures: function(req, res){
  146. let course = Course.findOne({_id: req.params.id});
  147. let lectures = Lecture.find({course: req.params.id});
  148. Promise.all([course, lectures])
  149. .then((response)=>{
  150. return res.json({course: response[0], lectures: response[1]});
  151. })
  152. .catch((err)=>{
  153. return res.json("Could not retrieve lectures");
  154. });
  155. },
  156. /*
  157. GET: get data for a single lecture
  158. req.params.id = String (lecture id)
  159. response = Lecture
  160. */
  161. getLecture: function(req, res){
  162. Lecture.findOne({_id: req.params.id})
  163. .populate("course")
  164. .then((lecture)=>{
  165. return res.json(lecture);
  166. })
  167. .catch((err)=>{
  168. return res.json("Could not retrieve lecture");
  169. });
  170. }
  171. }