TTMT.ManageWebGUI/src/services/user.service.ts

78 lines
2.4 KiB
TypeScript

import axios from "@/config/axios";
import { API_ENDPOINTS } from "@/config/api";
import type {
UserProfile,
UpdateUserInfoRequest,
UpdateUserRoleRequest,
UpdateUserInfoResponse,
UpdateUserRoleResponse,
} from "@/types/user-profile";
// Helper to extract data from wrapped or unwrapped response
function extractData<T>(responseData: any): T {
if (responseData && typeof responseData === "object" && "success" in responseData && "data" in responseData) {
return responseData.data as T;
}
return responseData as T;
}
/**
* Lấy danh sách thông tin người dùng và chuyển sang camelCase keys
*/
export async function getUsersInfo(): Promise<UserProfile[]> {
try {
const response = await axios.get<any[]>(API_ENDPOINTS.AUTH.GET_USERS_LIST);
const list = Array.isArray(response.data) ? response.data : [];
return list.map((u: any) => ({
userId: u.id ?? u.Id ?? u.userId ?? u.UserId ?? undefined,
userName: u.userName ?? u.UserName ?? "",
name: u.name ?? u.Name ?? "",
role: u.role ?? u.Role ?? "",
roleId: u.roleId !== undefined ? Number(u.roleId) : u.RoleId !== undefined ? Number(u.RoleId) : 0,
accessRooms: Array.isArray(u.accessRooms)
? u.accessRooms.map((v: any) => Number(v))
: Array.isArray(u.AccessRooms)
? u.AccessRooms.map((v: any) => Number(v))
: [],
createdAt: u.createdAt ?? u.CreatedAt ?? null,
createdBy: u.createdBy ?? u.CreatedBy ?? null,
updatedAt: u.updatedAt ?? u.UpdatedAt ?? null,
updatedBy: u.updatedBy ?? u.UpdatedBy ?? null,
} as UserProfile));
} catch (error) {
console.error("getUsersInfo error:", error);
throw error;
}
}
/**
* Cập nhật thông tin người dùng
*/
export async function updateUserInfo(
userId: number,
data: UpdateUserInfoRequest
): Promise<UpdateUserInfoResponse> {
const response = await axios.put(
API_ENDPOINTS.USER.UPDATE_INFO(userId),
data
);
return extractData<UpdateUserInfoResponse>(response.data);
}
/**
* Cập nhật role người dùng
*/
export async function updateUserRole(
userId: number,
data: UpdateUserRoleRequest
): Promise<UpdateUserRoleResponse> {
const response = await axios.put(
API_ENDPOINTS.USER.UPDATE_ROLE(userId),
data
);
return extractData<UpdateUserRoleResponse>(response.data);
}
export default { getUsersInfo, updateUserInfo, updateUserRole };