Skip to content

Commit 9d16a69

Browse files
committed
Section 9-Upload images and Image Processing
1 parent b9cfb32 commit 9d16a69

File tree

50 files changed

+1415
-82
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1415
-82
lines changed

.vscode/settings.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
"separators.enabledSymbols": [
33
"Classes",
44
"Enums",
5-
"Functions",
65
"Interfaces",
7-
"Methods",
86
"Namespaces",
97
"Structs"
10-
]
8+
],
9+
"cSpell.words": ["uuidv"]
1110
}

middlewares/uploadImageMiddleware.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const multer = require('multer');
2+
const ApiError = require('../utils/apiError');
3+
4+
const multerOptions = () => {
5+
6+
const multerStorage = multer.memoryStorage();
7+
8+
const multerFilter = function (req, file, cb) {
9+
if (file.mimetype.startsWith('image')) {
10+
cb(null, true);
11+
} else {
12+
cb(new ApiError('Only Images allowed', 400), false);
13+
}
14+
};
15+
16+
const upload = multer({ storage: multerStorage, fileFilter: multerFilter });
17+
18+
return upload;
19+
};
20+
21+
exports.uploadSingleImage = (fieldName) => multerOptions().single(fieldName);
22+
23+
exports.uploadMixOfImages = (arrayOfFields) =>
24+
multerOptions().fields(arrayOfFields);

models/brandModel.js

+15
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,20 @@ const brandSchema = new mongoose.Schema(
1818
{ timestamps: true }
1919
);
2020

21+
const setImageURL = (doc) => {
22+
if (doc.image) {
23+
const imageUrl = `${process.env.BASE_URL}/brands/${doc.image}`;
24+
doc.image = imageUrl;
25+
}
26+
};
27+
// findOne, findAll and update
28+
brandSchema.post('init', (doc) => {
29+
setImageURL(doc);
30+
});
31+
32+
// create
33+
brandSchema.post('save', (doc) => {
34+
setImageURL(doc);
35+
});
2136
// 2- Create model
2237
module.exports = mongoose.model('Brand', brandSchema);

models/categoryModel.js

+16
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,22 @@ const categorySchema = new mongoose.Schema(
1919
{ timestamps: true }
2020
);
2121

22+
const setImageURL = (doc) => {
23+
if (doc.image) {
24+
const imageUrl = `${process.env.BASE_URL}/categories/${doc.image}`;
25+
doc.image = imageUrl;
26+
}
27+
};
28+
// findOne, findAll and update
29+
categorySchema.post('init', (doc) => {
30+
setImageURL(doc);
31+
});
32+
33+
// create
34+
categorySchema.post('save', (doc) => {
35+
setImageURL(doc);
36+
});
37+
2238
// 2- Create model
2339
const CategoryModel = mongoose.model('Category', categorySchema);
2440

models/productModel.js

+24
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,28 @@ productSchema.pre(/^find/, function (next) {
8080
next();
8181
});
8282

83+
const setImageURL = (doc) => {
84+
if (doc.imageCover) {
85+
const imageUrl = `${process.env.BASE_URL}/products/${doc.imageCover}`;
86+
doc.imageCover = imageUrl;
87+
}
88+
if (doc.images) {
89+
const imagesList = [];
90+
doc.images.forEach((image) => {
91+
const imageUrl = `${process.env.BASE_URL}/products/${image}`;
92+
imagesList.push(imageUrl);
93+
});
94+
doc.images = imagesList;
95+
}
96+
};
97+
// findOne, findAll and update
98+
productSchema.post('init', (doc) => {
99+
setImageURL(doc);
100+
});
101+
102+
// create
103+
productSchema.post('save', (doc) => {
104+
setImageURL(doc);
105+
});
106+
83107
module.exports = mongoose.model('Product', productSchema);

0 commit comments

Comments
 (0)