learn.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. let files = req.files.documents;
  75. if(files.length === undefined){
  76. let fileString = `/documents/${files.name}`;
  77. files.mv(`${__dirname}/..${fileString}`);
  78. lecture.documents.push(fileString);
  79. }else{
  80. for(let i = 0; i < files.length; i++){
  81. let fileString = `/documents/${files[i].name}`;
  82. files[i].mv(`${__dirname}/..${fileString}`);
  83. lecture.documents.push(fileString);
  84. }
  85. }
  86. return lecture.save();
  87. })
  88. .then((lecture)=>{
  89. return res.redirect("/");
  90. })
  91. .catch((err)=>{
  92. if(err === "noCourse") return res.json("Course does not exist");
  93. if(err === "badOwner") return res.json("You do not own this course");
  94. if(err === "badPass") return res.json("Incorrect password");
  95. return res.redirect("/");
  96. });
  97. },
  98. getCourses: function(req, res){
  99. Course.find()
  100. .then((courses)=>{
  101. return res.json(courses);
  102. })
  103. .catch((err)=>{
  104. return res.json("Could not retrieve courses");
  105. });
  106. },
  107. /*
  108. GET: get a list of lectures from a course
  109. req.params.id = String (course id)
  110. response = {
  111. course: Course,
  112. lectures: [Lecture]
  113. }
  114. */
  115. getLectures: function(req, res){
  116. let course = Course.findOne({_id: req.params.id});
  117. let lectures = Lecture.find({course: req.params.id});
  118. Promise.all([course, lectures])
  119. .then((response)=>{
  120. return res.json({course: response[0], lectures: response[1]});
  121. })
  122. .catch((err)=>{
  123. return res.json("Could not retrieve lectures");
  124. });
  125. },
  126. /*
  127. GET: get data for a single lecture
  128. req.params.id = String (lecture id)
  129. response = Lecture
  130. */
  131. getLecture: function(req, res){
  132. Lecture.findOne({_id: req.params.id})
  133. .populate("course")
  134. .then((lecture)=>{
  135. return res.json(lecture);
  136. })
  137. .catch((err)=>{
  138. return res.json("Could not retrieve lecture");
  139. });
  140. }
  141. }