From c5e0fcc4f758d2bf0d158194017e5997748f744c Mon Sep 17 00:00:00 2001 From: kittapath Date: Fri, 21 Feb 2025 11:49:04 +0700 Subject: [PATCH] no message --- src/controllers/ImportDataController.ts | 7 ++++++- src/controllers/UserController.ts | 16 ++++++++++++++++ src/entities/HR_POSITION_OFFICER.ts | 7 +++++++ src/keycloak/index.ts | 25 +++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/controllers/ImportDataController.ts b/src/controllers/ImportDataController.ts index 903fa891..5b581859 100644 --- a/src/controllers/ImportDataController.ts +++ b/src/controllers/ImportDataController.ts @@ -328,7 +328,7 @@ export class ImportDataController extends Controller { .createQueryBuilder("profile") .select(["profile.citizenId", "profile.id"]) .orderBy("profile.citizenId", "ASC") - .skip(0) + .skip(20000) .take(10000) .getManyAndCount(); // for (var i = 1; i <= total / BATCH_SIZE; i++) { @@ -412,6 +412,11 @@ export class ImportDataController extends Controller { profileSalary.orgChild1 = item.DIVISION_NAME; profileSalary.orgChild2 = item.SECTION_NAME; profileSalary.orgChild3 = item.JOB_NAME; + if (item.DEPARTMENT_CODE == "50") { + profileSalary.orgRoot = item.DIVISION_NAME; + profileSalary.orgChild1 = item.SECTION_NAME; + profileSalary.orgChild2 = item.JOB_NAME; + } profileSalary.mpCee = item.MP_CEE; const ORDER_MOVE_POSITION: any = item.ORDER_MOVE_POSITION == null || item.ORDER_MOVE_POSITION == "" diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index cba039c9..2a7068dd 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -31,6 +31,7 @@ import { getUserCount, enableStatus, getUserByUsername, + changeUserPassword, } from "../keycloak"; import { AppDataSource } from "../database/data-source"; import { Profile } from "../entities/Profile"; @@ -812,4 +813,19 @@ export class KeycloakController extends Controller { } return result; } + + @Post("user/change-password") + async changeUserPassword( + @Request() request: { user: { sub: string; preferred_username: string } }, + @Body() + body: { + password: string; + }, + ) { + const result = await changeUserPassword(request.user.sub, body.password); + if (!result) { + throw new Error("Failed. Cannot change password."); + } + return result; + } } diff --git a/src/entities/HR_POSITION_OFFICER.ts b/src/entities/HR_POSITION_OFFICER.ts index 2fbf0bef..09312f1a 100644 --- a/src/entities/HR_POSITION_OFFICER.ts +++ b/src/entities/HR_POSITION_OFFICER.ts @@ -137,6 +137,13 @@ export class HR_POSITION_OFFICER { }) DEPARTMENT_NAME: string; + @Column({ + nullable: true, + type: "text", + default: null, + }) + DEPARTMENT_CODE: string; + @Column({ nullable: true, type: "text", diff --git a/src/keycloak/index.ts b/src/keycloak/index.ts index d4f5f8a6..e55be59a 100644 --- a/src/keycloak/index.ts +++ b/src/keycloak/index.ts @@ -736,3 +736,28 @@ export async function removeUserGroup(userId: string, groupId: string) { return true; } + +// Function to change user password +export async function changeUserPassword(userId: string, newPassword: string) { + try { + console.log(await getToken()); + const res = await fetch(`${KC_URL}/admin/realms/${KC_REALMS}/users/${userId}/reset-password`, { + // prettier-ignore + headers: { + "authorization": `Bearer ${await getToken()}`, + "content-type": `application/json`, + }, + method: "PUT", + body: JSON.stringify({ + type: "password", + value: newPassword, + temporary: false, // Set to true if the user must reset their password on next login + }), + }).catch((e) => console.log("Keycloak Error: ", e)); + + return true; + } catch (error) { + console.error("Error changing password:", error); + return false; + } +}