From 25a20c4ad223f7f1852be9d126bf810873381595 Mon Sep 17 00:00:00 2001 From: Methapon Metanipat Date: Thu, 24 Oct 2024 11:42:16 +0700 Subject: [PATCH] refactor: separate init user to utils --- src/app.ts | 51 ++----------------------------------------- src/utils/database.ts | 51 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 49 deletions(-) create mode 100644 src/utils/database.ts diff --git a/src/app.ts b/src/app.ts index c54afc0..16f62e9 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,9 +6,8 @@ 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"; +import { initFirstAdmin } from "./utils/database"; const APP_HOST = process.env.APP_HOST || "0.0.0.0"; const APP_PORT = +(process.env.APP_PORT || 3000); @@ -17,53 +16,7 @@ const APP_PORT = +(process.env.APP_PORT || 3000); 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(), - }, - }); - } + await initFirstAdmin(); const originalSend = app.response.json; diff --git a/src/utils/database.ts b/src/utils/database.ts new file mode 100644 index 0000000..9922c2a --- /dev/null +++ b/src/utils/database.ts @@ -0,0 +1,51 @@ +import prisma from "../db"; +import { addUserRoles, createUser, getRoleByName, listUser } from "../services/keycloak"; + +export async function initFirstAdmin() { + 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(), + }, + }); + } +}