const express = require("express"); const productsController = require("../controllers/products.controller"); const productsMiddleware = require("../middlewares/products.middleware"); var router = express.Router(); /** * @swagger * /api/products: * post: * summary: Create a new product * tags: [Products] * requestBody: * required: true * content: * application/json: * schema: * type: object * required: * - name * - description * - price * properties: * name: * type: string * description: * type: string * price: * type: number * example: * name: "iPhone 15" * description: "Latest Apple smartphone" * price: 999 * responses: * 201: * description: Product created successfully * content: * application/json: * schema: * $ref: '#/components/schemas/ProductResponse' * 400: * description: Validation error * 500: * description: Internal server error */ router.post("/", productsMiddleware.validateProduct ,productsController.saveProduct); /** * @swagger * /api/products: * get: * summary: Get all products * tags: [Products] * responses: * 200: * description: List of all products * content: * application/json: * schema: * type: array * items: * $ref: '#/components/schemas/Product' * 500: * description: Server error */ router.get("/", productsController.getProducts); /** * @swagger * /api/products/filter: * get: * summary: Get filtered products * tags: [Products] * parameters: * - in: query * name: name * schema: * type: string * description: Filter by product name * - in: query * name: minPrice * schema: * type: number * description: Minimum price * - in: query * name: maxPrice * schema: * type: number * description: Maximum price * responses: * 200: * description: Filtered list of products * content: * application/json: * schema: * type: array * items: * $ref: '#/components/schemas/Product' * 500: * description: Server error */ router.get("/filter", productsController.getFilteredProducts); /** * @swagger * /api/products/{name}: * put: * summary: Update a product by name * tags: [Products] * parameters: * - in: path * name: name * required: true * schema: * type: string * description: Product name * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * description: * type: string * price: * type: number * example: * description: "Updated smartphone description" * price: 899 * responses: * 201: * description: Product updated successfully * content: * application/json: * schema: * $ref: '#/components/schemas/UpdateResponse' * 400: * description: Validation error * 500: * description: Internal server error */ router.put("/:name", productsMiddleware.validateProductUpdate, productsController.updateProduct ) /** * @swagger * /api/products/{name}: * delete: * summary: Delete a product by name * tags: [Products] * parameters: * - in: path * name: name * required: true * schema: * type: string * description: Product name * responses: * 200: * description: Product deleted successfully * content: * application/json: * schema: * type: object * properties: * message: * type: string * 404: * description: Product not found */ router.delete("/:name", productsController.deleteProduct); module.exports = router;