learn.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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 = req.body.exercises.split("\r\n");
  70. exercises.splice(exercises.length - 1, 1);
  71. let furtherReading = req.body.furtherReading.split("\r\n");
  72. furtherReading.splice(furtherReading.length-1, 1);
  73. let readings = [];
  74. for(let i = 0; i < furtherReading.length; i+=2){
  75. readings.push({
  76. text: furtherReading[i],
  77. link: furtherReading[i+1]
  78. });
  79. }
  80. let lecture = new Lecture({
  81. course: course._id,
  82. title: req.body.title,
  83. video: req.body.video,
  84. description: req.body.description,
  85. furtherReading: readings,
  86. exercises: exercises,
  87. documents: []
  88. });
  89. if(req.files !== null){
  90. let files = req.files.documents;
  91. if(files.length === undefined){
  92. let fileId = createId(25);
  93. let fileParts = files.name.split(".");
  94. let fileString = `/documents/${fileId}.${fileParts[1]}`;
  95. files.mv(`${__dirname}/..${fileString}`);
  96. lecture.documents.push({
  97. name: fileParts[0],
  98. link: fileString
  99. })
  100. }else{
  101. for(let i = 0; i < files.length; i++){
  102. let fileId = createId(25);
  103. let fileParts = files[i].name.split(".");
  104. let fileString = `/documents/${fileId}.${fileParts[1]}`;
  105. files[i].mv(`${__dirname}/..${fileString}`);
  106. lecture.documents.push({
  107. name: fileParts[0],
  108. link: fileString
  109. });
  110. }
  111. }
  112. }
  113. return lecture.save();
  114. })
  115. .then((lecture)=>{
  116. return res.redirect("/");
  117. })
  118. .catch((err)=>{
  119. if(err === "noCourse") return res.json("Course does not exist");
  120. if(err === "badOwner") return res.json("You do not own this course");
  121. if(err === "badPass") return res.json("Incorrect password");
  122. return res.redirect("/");
  123. });
  124. },
  125. getCourses: function(req, res){
  126. Course.find()
  127. .then((courses)=>{
  128. return res.json(courses);
  129. })
  130. .catch((err)=>{
  131. return res.json("Could not retrieve courses");
  132. });
  133. },
  134. /*
  135. GET: get a list of lectures from a course
  136. req.params.id = String (course id)
  137. response = {
  138. course: Course,
  139. lectures: [Lecture]
  140. }
  141. */
  142. getLectures: function(req, res){
  143. let course = Course.findOne({_id: req.params.id});
  144. let lectures = Lecture.find({course: req.params.id});
  145. Promise.all([course, lectures])
  146. .then((response)=>{
  147. return res.json({course: response[0], lectures: response[1]});
  148. })
  149. .catch((err)=>{
  150. return res.json("Could not retrieve lectures");
  151. });
  152. },
  153. /*
  154. GET: get data for a single lecture
  155. req.params.id = String (lecture id)
  156. response = Lecture
  157. */
  158. getLecture: function(req, res){
  159. Lecture.findOne({_id: req.params.id})
  160. .populate("course")
  161. .then((lecture)=>{
  162. return res.json(lecture);
  163. })
  164. .catch((err)=>{
  165. return res.json("Could not retrieve lecture");
  166. });
  167. }
  168. }