Re_Figma_Code/src/services/userApi.ts

127 lines
2.8 KiB
TypeScript

import apiClient from './authApi';
export interface UserSummary {
userId: string;
email: string;
displayName?: string;
firstName?: string;
lastName?: string;
department?: string;
phone?: string;
mobilePhone?: string;
designation?: string;
jobTitle?: string;
manager?: string;
employeeId?: string;
employeeNumber?: string;
secondEmail?: string;
location?: {
state?: string;
city?: string;
country?: string;
office?: string;
};
isActive?: boolean;
}
export async function searchUsers(query: string, limit: number = 10) {
const res = await apiClient.get('/users/search', { params: { q: query, limit } });
// ResponseHandler.success returns { success: true, data: array }
return res;
}
/**
* Ensure user exists in database (creates if not exists)
* Call this when a user is selected/tagged to pre-create their record
*/
export async function ensureUserExists(userData: {
userId: string;
email: string;
displayName?: string;
firstName?: string;
lastName?: string;
department?: string;
phone?: string;
mobilePhone?: string;
designation?: string;
jobTitle?: string;
manager?: string;
employeeId?: string;
employeeNumber?: string;
secondEmail?: string;
location?: {
state?: string;
city?: string;
country?: string;
office?: string;
};
}): Promise<UserSummary> {
const res = await apiClient.post('/users/ensure', userData);
return (res.data?.data || res.data) as UserSummary;
}
/**
* Assign role to user (creates user if doesn't exist)
* @param email - User email
* @param role - Role to assign
*/
export async function assignRole(
email: string,
role: 'USER' | 'MANAGEMENT' | 'ADMIN'
) {
return await apiClient.post('/admin/users/assign-role', {
email,
role
});
}
/**
* Update user role by userId
*/
export async function updateUserRole(userId: string, role: 'USER' | 'MANAGEMENT' | 'ADMIN') {
return await apiClient.put(`/admin/users/${userId}/role`, { role });
}
/**
* Get users by role (with pagination)
*/
export async function getUsersByRole(
role?: 'USER' | 'MANAGEMENT' | 'ADMIN' | 'ALL' | 'ELEVATED',
page: number = 1,
limit: number = 10
) {
return await apiClient.get('/admin/users/by-role', {
params: { role: role || 'ELEVATED', page, limit }
});
}
/**
* Get role statistics
*/
export async function getRoleStatistics() {
return await apiClient.get('/admin/users/role-statistics');
}
/**
* Get all users from database (for filtering purposes)
*/
export async function getAllUsers() {
const res = await apiClient.get('/users');
// Response format: { success: true, data: { users: [...], total: number } }
return res.data?.data?.users || [];
}
export const userApi = {
searchUsers,
ensureUserExists,
assignRole,
updateUserRole,
getUsersByRole,
getRoleStatistics,
getAllUsers
};
export default userApi;