const express = require("express"); const bodyParser = require("body-parser"); const app = express(); // Middleware to parse JSON app.use(bodyParser.json()); // In-memory data store for demonstration let attributesData = { attributes: [], }; // CREATE - Add or update attributes app.post("/attributes", (req, res) => { const { attributes } = req.body; if (!attributes || !Array.isArray(attributes)) { return res.status(400).json({ error: "Attributes must be an array" }); } for (const attribute of attributes) { if (!attribute.key || !attribute.value) { return res.status(400).json({ error: "Each attribute must have a 'key' and 'value'", }); } // Check if the attribute already exists; if yes, update it const existingIndex = attributesData.attributes.findIndex( (item) => item.key === attribute.key ); if (existingIndex !== -1) { attributesData.attributes[existingIndex].value = attribute.value; } else { // Add new attribute attributesData.attributes.push(attribute); } } res.status(201).json({ message: "Attributes updated successfully", attributes: attributesData.attributes, }); }); // READ - Get all attributes app.get("/attributes", (req, res) => { res.json({ message: "Attributes retrieved successfully", attributes: attributesData.attributes, }); }); // READ - Get a specific attribute by key app.get("/attributes/:key", (req, res) => { const { key } = req.params; const attribute = attributesData.attributes.find( (item) => item.key === key ); if (!attribute) { return res.status(404).json({ error: `Attribute with key '${key}' not found` }); } res.json({ message: "Attribute retrieved successfully", attribute, }); }); // UPDATE - Update a specific attribute by key app.put("/attributes/:key", (req, res) => { const { key } = req.params; const { value } = req.body; if (!value) { return res.status(400).json({ error: "Value is required to update the attribute" }); } const attribute = attributesData.attributes.find( (item) => item.key === key ); if (!attribute) { return res.status(404).json({ error: `Attribute with key '${key}' not found` }); } // Update the value attribute.value = value; res.json({ message: "Attribute updated successfully", attributes: attributesData.attributes, }); }); // DELETE - Remove a specific attribute by key app.delete("/attributes/:key", (req, res) => { const { key } = req.params; const index = attributesData.attributes.findIndex( (item) => item.key === key ); if (index === -1) { return res.status(404).json({ error: `Attribute with key '${key}' not found` }); } // Remove the attribute attributesData.attributes.splice(index, 1); res.json({ message: "Attribute deleted successfully", attributes: attributesData.attributes, }); }); // Export app for serverless deployment module.exports = app;