jws-backend/src/app.ts
Methapon Metanipat eaf8ce3fd1 chore: remove join
2024-09-13 13:04:22 +07:00

96 lines
2.5 KiB
TypeScript

import "dotenv/config";
import cors from "cors";
import express, { json, urlencoded } from "express";
import swaggerUi from "swagger-ui-express";
import swaggerDocument from "./swagger.json";
import error from "./middlewares/error";
import morgan from "./middlewares/morgan";
import { RegisterRoutes } from "./routes";
import { addUserRoles, createUser, getRoleByName, listUser } from "./services/keycloak";
import prisma from "./db";
import { initThailandAreaDatabase } from "./utils/thailand-area";
const APP_HOST = process.env.APP_HOST || "0.0.0.0";
const APP_PORT = +(process.env.APP_PORT || 3000);
(async () => {
const app = express();
await initThailandAreaDatabase();
let users = await (async () => {
let list = await listUser();
while (!list) {
list = await listUser();
await new Promise((resolve) => setTimeout(resolve, 1000));
}
return list;
})();
if (users.length === 0) {
const role = await getRoleByName("system");
const userId = await createUser("admin", "1234", {
firstName: "Admin",
lastName: "System",
email: "admin@jws.local",
requiredActions: ["UPDATE_PASSWORD"],
enabled: true,
});
if (!userId || typeof userId !== "string") {
throw new Error("Error create user with keycloak service.");
}
if (role) await addUserRoles(userId, [role]);
await prisma.user.create({
data: {
id: userId,
email: "admin@jws.local",
gender: "",
address: "",
addressEN: "",
userType: "USER",
userRole: "system",
telephoneNo: "",
firstName: "Admin",
firstNameEN: "Admin",
lastName: "System",
lastNameEN: "System",
statusOrder: 0,
username: "admin",
citizenId: "",
citizenIssue: new Date(),
},
});
}
const originalSend = app.response.json;
app.response.json = function (body: unknown) {
this.app.locals.response = body;
return originalSend.call(this, body);
};
app.use(cors());
app.use(json());
app.use(urlencoded({ extended: true }));
app.use(morgan);
app.use("/", express.static("static"));
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument));
RegisterRoutes(app);
app.get("*", (_, res) =>
res.status(404).send({
status: 404,
message: "Route not found.",
devMessage: "unknown_url",
}),
);
app.use(error);
app.listen(APP_PORT, APP_HOST, () => console.log(`Listening on: http://localhost:${APP_PORT}`));
})();