4bnode
Version:
4bnode is a CLI-powered backend development platform with a built-in visual dashboard to generate, manage, and test Node.js/Express APIs faster.
83 lines (69 loc) • 2.17 kB
JavaScript
import path from "path";
import { select } from "@inquirer/prompts";
import { toPascalCase } from "./lib/names.js";
import { listRoutes, listModels } from "./lib/project.js";
import {
getRouteFilePath,
addImportToRoute,
insertCodeIntoRoute,
} from "./lib/routeFile.js";
import {
showHeader,
showTaskDone,
showError,
showFileAction,
} from "./lib/ui.js";
async function main() {
showHeader("add-mongo-delete", "Add data deletion route");
const routeFiles = listRoutes();
if (routeFiles.length === 0) {
showError("No route files found in src/routes.");
process.exit(1);
}
const modelFiles = listModels();
if (modelFiles.length === 0) {
showError("No model files found in src/models.");
process.exit(1);
}
const selectedRoute = await select({
message: "Select route file to modify:",
choices: routeFiles.map((f) => ({ name: f, value: f })),
});
const selectedModelFile = await select({
message: "Select model file to use:",
choices: modelFiles.map((f) => ({ name: f, value: f })),
});
const modelName = path.basename(selectedModelFile, ".js");
const pascalName = toPascalCase(modelName);
const routeFilePath = getRouteFilePath(selectedRoute);
console.log();
addImportToRoute(
routeFilePath,
`import ${pascalName} from '../models/${modelName}.js';`
);
const deleteCode = `
router.delete('/:id', async (req, res) => {
try {
const deletedDocument = await ${pascalName}.findByIdAndDelete(req.params.id);
if (!deletedDocument) {
return res.status(404).json({ message: 'Document not found' });
}
res.json({ message: 'Data deleted successfully', data: deletedDocument });
} catch (err) {
console.error(err);
res.status(500).json({ message: 'Server error' });
}
});`;
insertCodeIntoRoute(routeFilePath, deleteCode);
showFileAction("updated", `src/routes/${selectedRoute}`);
showTaskDone("Delete route added", [
`Route: DELETE /:id in ${selectedRoute}`,
`Model: ${modelName}`,
]);
}
main().catch((err) => {
if (err.name === "ExitPromptError") process.exit(0);
showError(err.message);
process.exit(1);
});