learn.js 5.6 KB

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