107 lines
3.7 KiB
JavaScript
107 lines
3.7 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const arg = process.argv[2];
|
|
|
|
function camelize(str) {
|
|
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
|
|
return index === 0 ? word.toLowerCase() : word.toUpperCase();
|
|
}).replace(/[\W]/g, "");
|
|
}
|
|
|
|
function toPascalCase(string) {
|
|
return `${string}`
|
|
.toLowerCase()
|
|
.replace(new RegExp(/[-_]+/, "g"), "")
|
|
.replace(new RegExp(/[^\w\s]/, "g"), "")
|
|
.replace(
|
|
new RegExp(/\s+(.)(\w*)/, "g"),
|
|
($1, $2, $3) => `${$2.toUpperCase() + $3}`
|
|
)
|
|
.replace(new RegExp(/\w/), s => s.toUpperCase());
|
|
}
|
|
|
|
const name = arg.trim();
|
|
const fileName = name.toLowerCase();
|
|
const varName = camelize(name);
|
|
const Controller = `${toPascalCase(name)}Controller`;
|
|
|
|
const content = `
|
|
import { IWorkLenzRequest } from "../interfaces/worklenz-request";
|
|
import { IWorkLenzResponse } from "../interfaces/worklenz-response";
|
|
|
|
import db from "../config/db";
|
|
import { ServerResponse } from "../models/server-response";
|
|
import WorklenzControllerBase from "./worklenz-controller-base";
|
|
import HandleExceptions from "../decorators/handle-exceptions";
|
|
|
|
export default class ${Controller} extends WorklenzControllerBase {
|
|
@HandleExceptions()
|
|
public static async create(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
|
|
const q = \`\`;
|
|
const result = await db.query(q, []);
|
|
const [data] = result.rows;
|
|
return res.status(200).send(new ServerResponse(true, data));
|
|
}
|
|
|
|
@HandleExceptions()
|
|
public static async get(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
|
|
const q = \`\`;
|
|
const result = await db.query(q, []);
|
|
return res.status(200).send(new ServerResponse(true, result.rows));
|
|
}
|
|
|
|
@HandleExceptions()
|
|
public static async getById(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
|
|
const q = \`\`;
|
|
const result = await db.query(q, []);
|
|
const [data] = result.rows;
|
|
return res.status(200).send(new ServerResponse(true, data));
|
|
}
|
|
|
|
@HandleExceptions()
|
|
public static async update(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
|
|
const q = \`\`;
|
|
const result = await db.query(q, []);
|
|
return res.status(200).send(new ServerResponse(true, result.rows));
|
|
}
|
|
|
|
@HandleExceptions()
|
|
public static async deleteById(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
|
|
const q = \`\`;
|
|
const result = await db.query(q, []);
|
|
return res.status(200).send(new ServerResponse(true, result.rows));
|
|
}
|
|
}
|
|
`;
|
|
|
|
const fullName = `${name}-controller`;
|
|
|
|
const apis = `
|
|
import express from "express";
|
|
|
|
import ${Controller} from "../../controllers/${fullName}";
|
|
|
|
const ${varName}ApiRouter = express.Router();
|
|
|
|
${varName}ApiRouter.post("/", ${Controller}.create);
|
|
${varName}ApiRouter.get("/", ${Controller}.get);
|
|
${varName}ApiRouter.get("/:id", ${Controller}.getById);
|
|
${varName}ApiRouter.put("/:id", ${Controller}.update);
|
|
${varName}ApiRouter.delete("/:id", ${Controller}.deleteById);
|
|
|
|
export default ${varName}ApiRouter;
|
|
`;
|
|
|
|
fs.writeFileSync(path.join(__dirname, "../src/controllers", `${fullName}.ts`), content.trim(), "utf8");
|
|
fs.writeFileSync(path.join(__dirname, "../src/routes/apis/", `${fileName}-api-router.ts`), apis.trim(), "utf8");
|
|
|
|
let api = fs.readFileSync(path.join(__dirname, "../src/routes/apis", "index.ts"), "utf8");
|
|
api = api.replace("\nconst api = express.Router();", `import ${varName}ApiRouter from "./${fileName}-api-router";\n\nconst api = express.Router();`);
|
|
api = api.replace("export default api;", `api.use("/${fileName}", ${varName}ApiRouter);\n\nexport default api;`);
|
|
fs.writeFileSync(path.join(__dirname, "../src/routes/apis", "index.ts"), api, "utf8");
|
|
|
|
console.log(`${fullName} generated`);
|