jan10gitbased/index.js
2025-01-10 18:49:37 +05:30

131 lines
3.1 KiB
JavaScript

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const PORT = 8080;
// Middleware to parse JSON
app.use(bodyParser.json());
// In-memory data store
let items = [];
let currentId = 1;
// Routes
// CREATE - Add a new item
app.post("/items", (req, res) => {
const { name, description } = req.body;
if (!name) {
return res.status(400).json({ error: "Name is required" });
}
const newItem = { id: currentId++, name, description };
items.push(newItem);
res.status(201).json(newItem);
});
// READ - Get all items
app.get("/items", (req, res) => {
res.json(items);
});
// READ - Get 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);
});
// UPDATE - Update item by ID
app.put("/items/:id", (req, res) => {
const { id } = req.params;
const { name, description } = req.body;
const item = items.find((i) => i.id === parseInt(id));
if (!item) {
return res.status(404).json({ error: "Item not found" });
}
if (name) item.name = name;
if (description) item.description = description;
res.json(item);
});
// DELETE - Remove 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) {
return res.status(404).json({ error: "Item not found" });
}
items.splice(itemIndex, 1);
res.status(204).send();
});
// READ - Get items with optional query parameters
app.get("/items/search", (req, res) => {
const { name, description } = req.query;
// Filter items based on query parameters
let filteredItems = items;
if (name) {
filteredItems = filteredItems.filter((item) =>
item.name.toLowerCase().includes(name.toLowerCase())
);
}
if (description) {
filteredItems = filteredItems.filter((item) =>
item.description &&
item.description.toLowerCase().includes(description.toLowerCase())
);
}
res.json(filteredItems);
});
// Start server
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});