learn.js 5.0 KB

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