learn.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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. exercises: [String]
  51. documents: [{
  52. title: String
  53. link: String
  54. }]
  55. }
  56. redirects to home
  57. */
  58. createLecture: function(req, res){
  59. Course.findOne({_id: req.body.course})
  60. .populate("owner")
  61. .then((course)=>{
  62. if(course === null) throw "noCourse";
  63. if(req.body.uploader !== course.owner._id.toString()) throw "badOwner";
  64. if(req.body.password !== course.owner.password) throw "badPass";
  65. let exercises = req.body.exercises.split("~");
  66. exercises.splice(exercises.length - 1, 1);
  67. let lecture = new Lecture({
  68. course: course._id,
  69. title: req.body.title,
  70. video: req.body.video,
  71. description: req.body.description,
  72. exercises: exercises,
  73. documents: []
  74. });
  75. if(req.files !== null){
  76. let files = req.files.documents;
  77. if(files.length === undefined){
  78. let fileId = createId(25);
  79. let fileParts = files.name.split(".");
  80. let fileString = `/documents/${fileId}.${fileParts[1]}`;
  81. files.mv(`${__dirname}/..${fileString}`);
  82. lecture.documents.push({
  83. name: fileParts[0],
  84. link: fileString
  85. })
  86. }else{
  87. for(let i = 0; i < files.length; i++){
  88. let fileId = createId(25);
  89. let fileParts = files[i].name.split(".");
  90. let fileString = `/documents/${fileId}.${fileParts[1]}`;
  91. files[i].mv(`${__dirname}/..${fileString}`);
  92. lecture.documents.push({
  93. name: fileParts[0],
  94. link: fileString
  95. });
  96. }
  97. }
  98. }
  99. return lecture.save();
  100. })
  101. .then((lecture)=>{
  102. return res.redirect("/");
  103. })
  104. .catch((err)=>{
  105. console.log(err);
  106. if(err === "noCourse") return res.json("Course does not exist");
  107. if(err === "badOwner") return res.json("You do not own this course");
  108. if(err === "badPass") return res.json("Incorrect password");
  109. return res.redirect("/");
  110. });
  111. },
  112. getCourses: function(req, res){
  113. Course.find()
  114. .then((courses)=>{
  115. return res.json(courses);
  116. })
  117. .catch((err)=>{
  118. return res.json("Could not retrieve courses");
  119. });
  120. },
  121. /*
  122. GET: get a list of lectures from a course
  123. req.params.id = String (course id)
  124. response = {
  125. course: Course,
  126. lectures: [Lecture]
  127. }
  128. */
  129. getLectures: function(req, res){
  130. let course = Course.findOne({_id: req.params.id});
  131. let lectures = Lecture.find({course: req.params.id});
  132. Promise.all([course, lectures])
  133. .then((response)=>{
  134. return res.json({course: response[0], lectures: response[1]});
  135. })
  136. .catch((err)=>{
  137. return res.json("Could not retrieve lectures");
  138. });
  139. },
  140. /*
  141. GET: get data for a single lecture
  142. req.params.id = String (lecture id)
  143. response = Lecture
  144. */
  145. getLecture: function(req, res){
  146. Lecture.findOne({_id: req.params.id})
  147. .populate("course")
  148. .then((lecture)=>{
  149. return res.json(lecture);
  150. })
  151. .catch((err)=>{
  152. return res.json("Could not retrieve lecture");
  153. });
  154. }
  155. }