product.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const Product = require('../models/product');
  2. const slugify = require('slugify');
  3. exports.getProducts = function (req, res) {
  4. Product
  5. .find({status: 'published'})
  6. .populate('author -_id -password -products -email -role')
  7. .populate('category')
  8. .sort({'updatedAt': -1})
  9. .exec((errors, products) => {
  10. if (errors) {
  11. return res.status(422).send(errors);
  12. }
  13. return res.json(products);
  14. })
  15. }
  16. exports.getInstructorProducts = function (req, res) {
  17. const userId = req.user.id;
  18. Product
  19. .find({author: userId})
  20. .populate('author')
  21. .sort({'updatedAt': -1})
  22. .exec((errors, products) => {
  23. if (errors) {
  24. return res.status(422).send(errors);
  25. }
  26. return res.json(products);
  27. })
  28. }
  29. exports.getProductById = (req, res) => {
  30. const id = req.params.id;
  31. Product
  32. .findById(id)
  33. .populate('category')
  34. .exec((errors, product) => {
  35. if (errors) {
  36. return res.status(422).send(errors);
  37. }
  38. return res.json(product);
  39. })
  40. }
  41. exports.getProductBySlug = (req, res) => {
  42. const slug = req.params.slug;
  43. Product
  44. .findOne({slug})
  45. .populate('author -_id -password -products -email -role')
  46. .exec((errors, product) => {
  47. if (errors) {
  48. return res.status(422).send(errors);
  49. }
  50. return res.json(product);
  51. })
  52. }
  53. // Needs recheck
  54. exports.createProduct = function (req, res) {
  55. const productData = req.body;
  56. const user = req.user;
  57. const product = new Product(productData);
  58. product.author = user;
  59. product.save((errors, createdProduct) => {
  60. if (errors) {
  61. return res.status(422).send(errors);
  62. }
  63. return res.json(createdProduct);
  64. });
  65. };
  66. exports.updateProduct = function (req, res) {
  67. const productId = req.params.id;
  68. const productData = req.body;
  69. Product.findById(productId)
  70. .populate('category')
  71. .exec((errors, product) => {
  72. if (errors) {
  73. return res.status(422).send(errors);
  74. }
  75. if (productData.status && productData.status === 'published' && !product.slug) {
  76. product.slug = slugify(product.title, {
  77. replacement: '-', // replace spaces with replacement
  78. remove: null, // regex to remove characters
  79. lower: true // result in lower case
  80. });
  81. }
  82. product.set(productData);
  83. product.save((errors, savedProduct) => {
  84. if (errors) {
  85. return res.status(422).send(errors);
  86. }
  87. return res.json(savedProduct);
  88. });
  89. })
  90. }