78 lines
2.4 KiB
TypeScript
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 };
|