learn.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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(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. for(let i = 0; i < files.length; i++){
  76. let fileString = `./documents/${files[i].name}`;
  77. files[i].mv(fileString);
  78. lecture.documents.push(fileString);
  79. }
  80. return lecture.save();
  81. })
  82. .then((lecture)=>{
  83. return res.redirect("/");
  84. })
  85. .catch((err)=>{
  86. if(err === "noCourse") return res.json("Course does not exist");
  87. if(err === "badOwner") return res.json("You do not own this course");
  88. if(err === "badPass") return res.json("Incorrect password");
  89. return res.redirect("/");
  90. });
  91. },
  92. getCourses: function(req, res){
  93. Course.find()
  94. .then((courses)=>{
  95. return res.json(courses);
  96. })
  97. .catch((err)=>{
  98. return res.json("Could not retrieve courses");
  99. });
  100. },
  101. /*
  102. GET: get a list of lectures from a course
  103. req.params.id = String (course id)
  104. response = [Lecture]
  105. */
  106. getLectures: function(req, res){
  107. let course = Course.findOne({_id: req.params.id});
  108. let lectures = Lecture.find({course: req.params.id});
  109. Promise.all([course, lectures])
  110. .then((response)=>{
  111. return res.json({course: response[0], lectures: response[1]});
  112. })
  113. .catch((err)=>{
  114. return res.json("Could not retrieve lectures");
  115. });
  116. }
  117. }