Skip to content
This repository has been archived by the owner on Jun 4, 2024. It is now read-only.

Commit

Permalink
feat:implement new edit product controller with B2
Browse files Browse the repository at this point in the history
  • Loading branch information
boytur committed Dec 27, 2023
1 parent f991cee commit cd98eb8
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 79 deletions.
142 changes: 65 additions & 77 deletions controller/con_edit_product.js
Original file line number Diff line number Diff line change
@@ -1,91 +1,79 @@
/*
เมื่อมี req มาจาก routes edit-products
ให้แก้ไขข้อมูลลงใน database ผ่านโครงสร้าง schema
DATE : 28/กันยายน/2023
OWNER : piyawat W.
*/

/*เพื่อแปลง _id ที่รับมาเป็น String จาก user ให้เป็น Objet เพราะ MongoDB
ซัพพอร์ตแค่ Object
*/

const express = require('express');
const AddProduct = require('../schema/product_schema');
const app = express();
const { ObjectId } = require('mongodb');
const EditProduct = require("../schema/product_schema");
const multer = require('multer');
const path = require('path');
const app = express();


const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
const ext = path.extname(file.originalname);
cb(null, file.fieldname + '-' + Date.now() + ext);
}
});

const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
app.use(express.static('uploads'));
const uploadToB2 = require('../middleware/uploadB2');
const product_schema = require('../schema/product_schema');

exports.edit_product = async (req, res) => {
const { _id, name, price, volume } = req.body;
const fileName = req.file ? req.file.filename : null;
console.table({ name, fileName , name , price , volume});
app.post('/edit-product', upload.single('image'), async (req, res) => {
const fileName = generateFileName();
const imageURLs = req.file ? `${process.env.URL}${fileName}` : 'https://placehold.co/600x400/EEE/31343C';

//validate ข้อมูลก่อนส่งแก้ไข
switch (true) {
case !_id:
return res.status(400).json({
error: "เกิดข้อผิดพลาดกับสินค้าไอดีนี้",
});
break;
case !name:
return res.status(400).json({
error: "กรุณาใส่ชื่อสินค้า",
});
break;
case volume <= -1 || price <= 0:
return res.status(400).json({
error: "อย่าใส่ค่าติดลบมาโว้ยยยลำบากมาเขียน validate เนี่ย",
});
break;
}

//หาว่ามีชื่อซํ้าไหม
const existingProduct = await EditProduct.findOne({ name: name });
if (existingProduct) {
return res.status(400).json({
error: "สินค้าชื่อนี้มีอยู่ในคลังแล้ว",
});
editProduct(req.body, imageURLs, res, req)
if (!req.file) {
console.log('Image not found!');
} else {
//ถ้าไม่ให้บันทึกข้อมูลลง database
await uploadToB2(req.file.buffer, fileName, res);
}

async function editProduct(productData, imageURLs, res, req) {
try {
const updatedProduct = await EditProduct.updateOne(
{_id:new ObjectId(_id)}, //แปลง id_ ที่รับมาให้เป็น Objet
{
name: name,
image: fileName,
price: price,
volume: volume,
},
{ new: true }
);
//validate ข้อมูลก่อนส่งแก้ไข
switch (true) {
case !productData._id:
return res.status(400).json({
error: "เกิดข้อผิดพลาดกับสินค้าไอดีนี้",
});
case !productData.name:
return res.status(400).json({
error: "กรุณาใส่ชื่อสินค้า",
});
case productData.volume <= -1 || productData.price <= 0:
return res.status(400).json({
error: "อย่าใส่ค่าติดลบมาโว้ยยยลำบากมาเขียน validate เนี่ย",
});
}

if (!updatedProduct) {
return res.status(404).json({
error: "ไม่เจอสินค้า",
//หาว่ามีชื่อซํ้าไหม
const existingProduct = await product_schema.findOne({ name: productData.name });
if (existingProduct) {
return res.status(400).json({
error: "สินค้าชื่อนี้มีอยู่ในคลังแล้ว",
});
}
} else {
const updatedProduct = await product_schema.updateOne(
{ _id: new ObjectId(productData._id) }, //แปลง id_ ที่รับมาให้เป็น Objet
{
name: productData.name,
image: imageURLs,
price: productData.price,
volume: productData.volume,
},
{ new: true }
);

if (!updatedProduct) {
return res.status(404).json({
error: "ไม่เจอสินค้า",
});
}

res.json(updatedProduct);
} catch (err) {
res.status(200).send({
success: true,
msg: "แก้ไขข้อมูลสินค้าเรียบร้อยค่ะ!"
})
}
}
catch (err) {
console.error(err);
res.status(500).json({
error: "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์",
});
}
}
};
function generateFileName() {
return `img${Date.now()}`;
}
});

module.exports = app;
4 changes: 2 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ app.use(express.json());
// Import route files
const view_product = require('./routes/view_product');
const view_outstock_product = require('./routes/view_outstock_product');
const edit_product = require('./routes/edit_product');
const delete_product = require('./routes/delete_product')
const register = require('./routes/register_route');
const login_route = require('./routes/login_route');
Expand All @@ -51,7 +50,8 @@ app.use(con_add_new_product, auth.isLogin);
//Route view product outstock
app.get('/view-outstock-product', auth.isLogin, view_outstock_product);
//Route edit product
app.post('/edit-product', auth.isLogin, edit_product)
const edit_product = require("./controller/con_edit_product");
app.use(edit_product, auth.isLogin);
//Route delete product และส่ง para เป็น _id
app.delete('/delete-product/:_id', auth.isLogin, delete_product);
//Route sale
Expand Down

0 comments on commit cd98eb8

Please sign in to comment.