.
to install the packages.
// Import Modules
const express = require("express");
const { open } = require("sqlite");
const sqlite3 = require("sqlite3");
const path = require("path");
// database Path
const databasePath = path.join(__dirname, "todoApplication.db");
// Calling Express and accept JSON file
const app = express();
app.use(express.json());
// Database Initialization
let database = null;
const databaseInitialization = async () => {
try {
database = await open({
filename: databasePath,
driver: sqlite3.Database,
});
app.listen(3000, () =>
console.log("Server is running at: http://localhost:3000")
);
} catch (error) {
console.log(error.message);
process.exit(1);
}
};
databaseInitialization();
// API 1 Scenario 1
const hasPriorityAndStatusProperties = (requestQuery) => {
return (
requestQuery.priority !== undefined && requestQuery.status !== undefined
);
};
const hasPriorityProperty = (requestQuery) => {
return requestQuery.priority !== undefined;
};
const hasStatusProperty = (requestQuery) => {
return requestQuery.status !== undefined;
};
app.get("/todos/", async (request, response) => {
let data = null;
let getTodosQuery = "";
const { search_q = "", priority, status } = request.query;
switch (true) {
case hasPriorityAndStatusProperties(request.query): //if this is true then below query is taken in the code
getTodosQuery = `
SELECT
*
FROM
todo
WHERE
todo LIKE '%${search_q}%'
AND status = '${status}'
AND priority = '${priority}';`;
break;
case hasPriorityProperty(request.query):
getTodosQuery = `
SELECT
*
FROM
todo
WHERE
todo LIKE '%${search_q}%'
AND priority = '${priority}';`;
break;
case hasStatusProperty(request.query):
getTodosQuery = `
SELECT
*
FROM
todo
WHERE
todo LIKE '%${search_q}%'
AND status = '${status}';`;
break;
default:
getTodosQuery = `
SELECT
*
FROM
todo
WHERE
todo LIKE '%${search_q}%';`;
}
data = await database.all(getTodosQuery);
response.send(data);
});
// API 2
app.get("/todos/:todoId/", async (request, response) => {
const { todoId } = request.params;
const queryPerId = `
SELECT *
FROM todo
WHERE id = '${todoId}';`;
const getDataAsPerId = await database.get(queryPerId);
response.send(getDataAsPerId);
});
// API 3
app.post("/todos/", async (request, response) => {
const { id, todo, priority, status } = request.body;
const queryToPostDatabase = `
INSERT INTO todo(id, todo, priority, status)
VALUES ('${id}', '${todo}', '${priority}', '${status}');`;
await database.run(queryToPostDatabase);
response.send("Todo Successfully Added");
});
// API 4
app.put("/todos/:todoId/", async (request, response) => {
const { todoId } = request.params;
let updateColumn = "";
const requestBody = request.body;
switch (true) {
case requestBody.status !== undefined:
updateColumn = "Status";
break;
case requestBody.priority !== undefined:
updateColumn = "Priority";
break;
case requestBody.todo !== undefined:
updateColumn = "Todo";
break;
}
const previousTodoQuery = `
SELECT
*
FROM
todo
WHERE
id = ${todoId};`;
const previousTodo = await database.get(previousTodoQuery);
const {
todo = previousTodo.todo,
priority = previousTodo.priority,
status = previousTodo.status,
} = request.body;
const updateTodoQuery = `
UPDATE
todo
SET
todo='${todo}',
priority='${priority}',
status='${status}'
WHERE
id = ${todoId};`;
await database.run(updateTodoQuery);
response.send(`${updateColumn} Updated`);
});
// API 5
app.delete("/todos/:todoId/", async (request, response) => {
const { todoId } = request.params;
const queryToDelete = `
DELETE FROM todo
WHERE id = ${todoId};`;
await database.run(queryToDelete);
response.send("Todo Deleted");
});
module.exports = app;