Skip to content

Commit 8ab376c

Browse files
committed
components: product[routes + validation]
1 parent 17c3500 commit 8ab376c

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

components/products/product_routes.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import express from "express";
2+
import * as product from './product_controller.js';
3+
import { validate } from '../../middleware/validation.js';
4+
import {
5+
addProductValidation,
6+
deleteProductValidation,
7+
getSpecificProductValidation,
8+
updateProductValidation,
9+
} from "./product_validation.js";
10+
import { uploadMultipleFiles } from '../../db/multer.js';
11+
import { allowedTo, protectedRoutes } from '../auth/auth_controller.js';
12+
13+
14+
const productRouter = express.Router();
15+
16+
let arrFields = [
17+
{ name: "imgCover", maxCount: 1 },
18+
{ name: "images", maxCount: 20 },
19+
];
20+
21+
productRouter.route("/").post(protectedRoutes, allowedTo("admin", "user"), uploadMultipleFiles(arrFields, "products"), validate(addProductValidation), product.addProduct).get(product.getAllProducts);
22+
23+
productRouter.route("/:id").put(protectedRoutes, allowedTo("admin"), validate(updateProductValidation), product.updateProduct).delete(protectedRoutes, allowedTo("admin"), validate(deleteProductValidation), product.deleteProduct).get(validate(getSpecificProductValidation), product.getSpecificProduct);
24+
25+
export default productRouter;
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import Joi from "joi";
2+
3+
const addProductValidation = Joi.object({
4+
title: Joi.string().required().trim().min(3),
5+
imgCover: Joi.string(),
6+
images: Joi.array().items(Joi.string()),
7+
descripton: Joi.string().max(100).min(10).required().trim(),
8+
price: Joi.number().min(0).required().default(0),
9+
priceAfterDiscount: Joi.number().min(0).default(0),
10+
quantity: Joi.number().min(0).default(0),
11+
sold: Joi.number().min(0).default(0),
12+
category: Joi.string().hex().length(24).required(),
13+
subcategory: Joi.string().hex().length(24).required(),
14+
brand: Joi.string().hex().length(24).required(),
15+
ratingAvg: Joi.number().min(1).max(5),
16+
ratingCount: Joi.number().min(0),
17+
});
18+
19+
const getSpecificProductValidation = Joi.object({
20+
id: Joi.string().hex().length(24).required(),
21+
});
22+
23+
const updateProductValidation = Joi.object({
24+
id: Joi.string().hex().length(24).required(),
25+
imgCover: Joi.string(),
26+
images: Joi.array().items(Joi.string()),
27+
title: Joi.string().required().trim().min(3),
28+
descripton: Joi.string().max(100).min(10).trim(),
29+
price: Joi.number().min(0).default(0),
30+
priceAfterDiscount: Joi.number().min(0).default(0),
31+
quantity: Joi.number().min(0).default(0),
32+
sold: Joi.number().min(0).default(0),
33+
category: Joi.string().hex().length(24),
34+
subcategory: Joi.string().hex().length(24),
35+
brand: Joi.string().hex().length(24),
36+
ratingAvg: Joi.number().min(1).max(5),
37+
ratingCount: Joi.number().min(0),
38+
});
39+
40+
const deleteProductValidation = Joi.object({
41+
id: Joi.string().hex().length(24).required(),
42+
});
43+
44+
export {
45+
addProductValidation,
46+
getSpecificProductValidation,
47+
updateProductValidation,
48+
deleteProductValidation,
49+
};

0 commit comments

Comments
 (0)