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(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 { try { const response = await axios.get(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 { const response = await axios.put( API_ENDPOINTS.USER.UPDATE_INFO(userId), data ); return extractData(response.data); } /** * Cập nhật role người dùng */ export async function updateUserRole( userId: number, data: UpdateUserRoleRequest ): Promise { const response = await axios.put( API_ENDPOINTS.USER.UPDATE_ROLE(userId), data ); return extractData(response.data); } export default { getUsersInfo, updateUserInfo, updateUserRole };