From 534cc5cabcf466af4e7fb012296b0fd553c571eb Mon Sep 17 00:00:00 2001 From: Kajal Thakur Date: Thu, 16 Jan 2025 16:32:48 +0530 Subject: [PATCH] crud --- index.js | 137 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 52 deletions(-) diff --git a/index.js b/index.js index fcc2049..282c90c 100644 --- a/index.js +++ b/index.js @@ -7,15 +7,30 @@ const PORT = 8080; // Middleware to parse JSON app.use(bodyParser.json()); -// In-memory data store +// In-memory data store for demonstration let items = []; let currentId = 1; +// Middleware to handle dynamic headers +app.use((req, res, next) => { + const dynamicHeaders = req.headers; + req.dynamicHeaders = dynamicHeaders; // Store headers for use in routes + next(); +}); + // Routes // CREATE - Add a new item app.post("/items", (req, res) => { - const { name, description } = req.body; + const { headers, body, query } = req; + const { stateParams } = req.body; // State parameters passed in body + + // Dynamic handling example for headers, query params, and state params + console.log("Headers:", headers); + console.log("Query Params:", query); + console.log("State Params:", stateParams); + + const { name, description } = body; if (!name) { return res.status(400).json({ error: "Name is required" }); @@ -23,56 +38,60 @@ app.post("/items", (req, res) => { const newItem = { id: currentId++, name, description }; items.push(newItem); - res.status(201).json(newItem); + res.status(201).json({ + message: "Item created successfully", + headers: req.dynamicHeaders, + queryParams: query, + stateParams, + item: newItem, + }); }); // READ - Get all items app.get("/items", (req, res) => { - res.json(items); + const { query } = req; + + // Filter by query parameters if provided + let filteredItems = items; + if (query.name) { + filteredItems = filteredItems.filter((item) => + item.name.toLowerCase().includes(query.name.toLowerCase()) + ); + } + + if (query.description) { + filteredItems = filteredItems.filter((item) => + item.description && + item.description.toLowerCase().includes(query.description.toLowerCase()) + ); + } + + res.json({ + message: "Items retrieved successfully", + headers: req.dynamicHeaders, + queryParams: query, + items: filteredItems, + }); }); -// READ - Get item by ID +// READ - Get an item by ID app.get("/items/:id", (req, res) => { const { id } = req.params; - const item = items.find((i) => i.id === parseInt(id)); - if (!item) { - return res.status(404).json({ error: "Item not found" }); - } - - res.json(item); -}); - -// READ - Get items by ID and filter by query parameters -app.get("/items/:id/search", (req, res) => { - const { id } = req.params; // Path parameter - const { name, description } = req.query; // Query parameters - - // Find the item by ID const item = items.find((i) => i.id === parseInt(id)); if (!item) { return res.status(404).json({ error: "Item not found" }); } - // Apply query parameter filters - let filteredDetails = { ...item }; - - // Filter item fields based on query parameters - if (name && !item.name.toLowerCase().includes(name.toLowerCase())) { - return res.status(404).json({ error: "Item name does not match query" }); - } - - if ( - description && - (!item.description || !item.description.toLowerCase().includes(description.toLowerCase())) - ) { - return res.status(404).json({ error: "Item description does not match query" }); - } - - res.json(filteredDetails); + res.json({ + message: "Item retrieved successfully", + headers: req.dynamicHeaders, + queryParams: req.query, + item, + }); }); -// UPDATE - Update item by ID +// UPDATE - Update an item by ID app.put("/items/:id", (req, res) => { const { id } = req.params; const { name, description } = req.body; @@ -85,46 +104,60 @@ app.put("/items/:id", (req, res) => { if (name) item.name = name; if (description) item.description = description; - res.json(item); + res.json({ + message: "Item updated successfully", + headers: req.dynamicHeaders, + stateParams: req.body.stateParams, + updatedItem: item, + }); }); -// DELETE - Remove item by ID +// DELETE - Remove an item by ID app.delete("/items/:id", (req, res) => { const { id } = req.params; - const itemIndex = items.findIndex((i) => i.id === parseInt(id)); - if (itemIndex === -1) { + const index = items.findIndex((i) => i.id === parseInt(id)); + if (index === -1) { return res.status(404).json({ error: "Item not found" }); } - items.splice(itemIndex, 1); - res.status(204).send(); + items.splice(index, 1); + res.status(204).send({ + message: "Item deleted successfully", + headers: req.dynamicHeaders, + }); }); -// READ - Get items with optional query parameters +// READ - Get items with optional dynamic query parameters app.get("/items/search", (req, res) => { - const { name, description } = req.query; + const { query } = req; // Filter items based on query parameters let filteredItems = items; - if (name) { + if (query.name) { filteredItems = filteredItems.filter((item) => - item.name.toLowerCase().includes(name.toLowerCase()) + item.name.toLowerCase().includes(query.name.toLowerCase()) ); } - if (description) { - filteredItems = filteredItems.filter((item) => - item.description && - item.description.toLowerCase().includes(description.toLowerCase()) + if (query.description) { + filteredItems = filteredItems.filter( + (item) => + item.description && + item.description.toLowerCase().includes(query.description.toLowerCase()) ); } - res.json(filteredItems); + res.json({ + message: "Filtered items retrieved successfully", + headers: req.dynamicHeaders, + queryParams: query, + items: filteredItems, + }); }); -// Start server +// Start the server app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); });