hayat / routes /products.js
Mohamed Abu Basith
addded all files
97f53b4
const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
const multer = require('multer');
const Product = require("../Database/models/product");
const { Category } = require("../Database/models/category");
const firebase = require("../utils/firebase")
var imageUrl = ""
//Disk storage where image store
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/products');
},
filename: function (req, file, cb) {
cb(null, file.originalname);
}
});
//Check the image formate
const fileFilter = (req, file, cb) => {
// reject a file
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png' || file.mimetype === 'image/jpg') {
cb(null, true);
} else {
cb(null, false);
}
};
//image size
const upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 5
},
fileFilter: fileFilter
});
//Add products
router.post("/", upload.single('file'), async (req, res, next) => {
await firebase.uploadFile(req.file.path, req.file.filename)
await firebase.generateSignedUrl(req.file.filename).then(res => {
imageUrl = res
})
if (imageUrl == "") {
imageUrl = req.file.path
}
console.log(req.body)
const product = Product({
_id: mongoose.Types.ObjectId(),
name: req.body.name,
price: req.body.price,
description: req.body.description,
productImage: imageUrl,
isLiked: req.body.isLiked,
});
product
.save()
.then(result => {
console.log(result);
res.status(201).json({
message: "Created product successfully",
createdProduct: {
productName: result.name,
productPrice: result.price,
productDescription: result.description,
productisLiked: result.isLiked,
_id: result._id,
request: {
type: 'GET',
url: "http://localhost:3000/products/" + result._id
}
}
});
})
.catch(err => {
console.log(err.message);
res.status(500).json({
error: err
});
});
});
//Get products
router.get("/", (req, res, next) => {
Product.find()
.select("name price description category _id productImage isLiked")
.exec()
.then(docs => {
const response = {
count: docs.length,
products: docs.map(doc => {
return {
productName: doc.name,
productPrice: doc.price,
productDescription: doc.description,
productImage: doc.productImage,
productisLiked: doc.isLiked,
_id: doc._id,
request: {
type: "GET",
url: "http://localhost:4000/products/" + doc._id
}
};
})
};
// if (docs.length >= 0) {
res.status(200).json(response);
// } else {
// res.status(404).json({
// message: 'No entries found'
// });
// }
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
//Update products
router.put('/:id', async (req, res) => {
const id = req.params.id;
console.log(req.body);
const updateOps = {};
for (const ops of Object.keys(req.body)) {
updateOps[ops.propName] = ops.value;
}
// const product = new Product({
// _id: new mongoose.Types.ObjectId(),
// name: req.body.name,
// price: req.body.price,
// description: req.body.description,
// category: req.body.category,
// productImage: req.file.path,
// rating: req.body.rating,
// });
Product.findOne({ _id: id }, function (err, data) {
if (!data) {
console.log(err);
res.status(500).json({
error: err
});
} else {
if (req.body.name != "") {
data.name = req.body.name
}
if (req.body.price != "") {
data.price = req.body.price
}
if (req.body.description != "") {
data.description = req.body.description
}
if (req.body.productImage != "") {
data.productImage = req.body.productImage
}
if (req.body.rating != "") {
data.rating = req.body.rating
}
data.save(function (err, Person) {
if (err) {
console.log(err);
res.status(500).json({
error: err
});
} else {
res.status(200).json({
message: 'Product updated',
request: {
type: 'GET',
url: 'http://localhost:4000/products/' + id
}
});
}
});
}
});
// Product.updateOne({ _id: id }, { $set: updateOps })
// .exec()
// .then(result => {
// res.status(200).json({
// message: 'Product updated',
// request: {
// type: 'GET',
// url: 'http://localhost:4000/products/' + id
// }
// });
// })
// .catch(err => {
// console.log(err);
// res.status(500).json({
// error: err
// });
// });
});
//Delete products
router.delete("/:id", (req, res) => {
const id = req.params.id;
Product.deleteOne({ _id: id })
.exec()
.then(result => {
res.status(200).json({
message: 'Product deleted',
request: {
type: 'POST',
url: 'http://localhost:3000/products',
body: { name: 'String', price: 'Number' }
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
module.exports = router;
// Product.findOne({ _id: req.body.productId }, (err, data) => {
// if (!data) {
// res.status(500).json({
// err: 'Data not found'
// });
// } else {
// data.Product = req.body.Product;
// data.price = req.body.price;
// data.save(function (err, Person) {
// if (err) {
// res.status(500).json({
// err: err
// })
// } else {
// res.status(200).json({
// message: 'Product updated',
// request: {
// trype: 'GET',
// url: 'http://localhost:4000/products/' + data._id
// }
// })
// }
// });
// }
// }).catch(err => {
// console.log(err);
// res.status(500).json({
// error: err
// });
// });