2024-04-01 13:28:43 +07:00
|
|
|
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 { RegisterRoutes } from "./routes";
|
2024-04-03 16:12:41 +07:00
|
|
|
import logMiddleware from "./middlewares/log";
|
2024-07-01 13:24:02 +07:00
|
|
|
import { addUserRoles, createUser, getRoleByName, listUser } from "./services/keycloak";
|
|
|
|
|
import prisma from "./db";
|
2024-04-01 13:28:43 +07:00
|
|
|
|
2024-04-01 13:36:06 +07:00
|
|
|
const APP_HOST = process.env.APP_HOST || "0.0.0.0";
|
|
|
|
|
const APP_PORT = +(process.env.APP_PORT || 3000);
|
|
|
|
|
|
2024-04-01 13:28:43 +07:00
|
|
|
(async () => {
|
|
|
|
|
const app = express();
|
|
|
|
|
|
2024-07-01 13:24:02 +07:00
|
|
|
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({
|
|
|
|
|
include: { province: true, district: true, subDistrict: true },
|
|
|
|
|
data: {
|
|
|
|
|
id: userId,
|
|
|
|
|
email: "admin@jws.local",
|
|
|
|
|
gender: "",
|
|
|
|
|
address: "",
|
|
|
|
|
addressEN: "",
|
|
|
|
|
zipCode: "",
|
|
|
|
|
userType: "USER",
|
|
|
|
|
userRole: "system",
|
|
|
|
|
telephoneNo: "",
|
|
|
|
|
firstName: "Admin",
|
|
|
|
|
firstNameEN: "Admin",
|
|
|
|
|
lastName: "System",
|
|
|
|
|
lastNameEN: "System",
|
|
|
|
|
statusOrder: 0,
|
|
|
|
|
username: "admin",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-01 13:28:43 +07:00
|
|
|
app.use(cors());
|
|
|
|
|
app.use(json());
|
|
|
|
|
app.use(urlencoded({ extended: true }));
|
2024-04-03 16:12:41 +07:00
|
|
|
|
|
|
|
|
app.use(logMiddleware);
|
|
|
|
|
|
2024-04-01 13:28:43 +07:00
|
|
|
app.use("/", express.static("static"));
|
|
|
|
|
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument));
|
|
|
|
|
|
|
|
|
|
RegisterRoutes(app);
|
|
|
|
|
|
2024-04-02 15:26:37 +07:00
|
|
|
app.get("*", (_, res) =>
|
|
|
|
|
res.status(404).send({
|
|
|
|
|
status: 404,
|
|
|
|
|
message: "Route not found.",
|
|
|
|
|
devMessage: "unknown_url",
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
|
2024-04-01 13:28:43 +07:00
|
|
|
app.use(error);
|
|
|
|
|
|
|
|
|
|
app.listen(APP_PORT, APP_HOST, () => console.log(`Listening on: http://localhost:${APP_PORT}`));
|
|
|
|
|
})();
|