Skip to content
This repository was archived by the owner on Sep 20, 2025. It is now read-only.

Commit bc45944

Browse files
committed
Delete photos in delete product request
1 parent e9584e2 commit bc45944

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

src/models/v1/productPhoto.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,37 @@ module.exports = (sequelize, DataTypes) => {
171171
return false;
172172
}
173173
}
174+
175+
/**
176+
* @param {number} id
177+
* @returns {boolean}
178+
*/
179+
static async deleteProductPhoto(id) {
180+
try {
181+
const result = await sequelize.query(
182+
`UPDATE ${this.getTableName()}
183+
SET deletedAt = :deletedAt
184+
WHERE id = :id`,
185+
{
186+
type: sequelize.QueryTypes.UPDATE,
187+
replacements: {
188+
deletedAt: moment()
189+
.utc()
190+
.format(mysqlTimeFormat),
191+
id,
192+
},
193+
},
194+
);
195+
console.log("result", result);
196+
197+
return true;
198+
} catch(err) {
199+
if ("production" !== nodeEnv) {
200+
console.log(err);
201+
}
202+
return false;
203+
}
204+
}
174205
}
175206
productPhoto.init({
176207
id: {

src/routes/api/v1/web/admin/products/product.js

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ const { status, } = require("http-status");
33
const db = require("../../../../../../models/v1");
44
const { message500, message404, message200, } = require("../../../../../../utils/httpResponses");
55
const adminAuthenticate = require("../../../../../../middlewares/v1/adminAuthenticate");
6+
const { removeFile, productPhotoAsset, } = require("../../../../../../utils/file");
7+
const { nodeEnv, } = require("../../../../../../config");
68

79
const router = express.Router({
810
mergeParams: true,
@@ -40,8 +42,29 @@ router.delete("/", adminAuthenticate, async (req, res) => {
4042
return res.json({ error: message404, });
4143
}
4244

43-
// TODO: Delete product images
44-
45+
const productPhotos = await db.sequelize.models
46+
.productPhoto
47+
.getProductPhotos(
48+
product.id,
49+
);
50+
if (false !== productPhotos) {
51+
for(const photo of productPhotos) {
52+
removeFile(productPhotoAsset(photo.name));
53+
54+
const deletePhoto = await db.sequelize.models
55+
.productPhoto
56+
.deleteProductPhoto(
57+
photo.id,
58+
);
59+
if (false === deletePhoto) {
60+
if ("production" !== nodeEnv) {
61+
console.log(
62+
"Delete product image failed with id "+photo.id,
63+
)
64+
}
65+
}
66+
}
67+
}
4568

4669
const deleteProduct = await db.sequelize.models
4770
.product

src/utils/file.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ exports.removeFile = async path => {
55
};
66

77
// 3MB
8-
exports.fileSize = 3145728;
8+
exports.fileSize = 3145728;
9+
10+
exports.productPhotoAsset = fileName => {
11+
return `public/productPhotos/${fileName}`;
12+
}

0 commit comments

Comments
 (0)