xpeditis2.0/apps/frontend/lib/api/users.ts
David-Henri ARNAUD b31d325646 feature phase 2
2025-10-10 15:07:05 +02:00

113 lines
2.3 KiB
TypeScript

/**
* Users API
*
* User management API calls
*/
import { apiClient } from './client';
export interface User {
id: string;
organizationId: string;
email: string;
firstName: string;
lastName: string;
role: 'admin' | 'manager' | 'user' | 'viewer';
phoneNumber?: string;
isEmailVerified: boolean;
isActive: boolean;
lastLoginAt?: string;
createdAt: string;
updatedAt: string;
}
export interface CreateUserRequest {
organizationId: string;
email: string;
firstName: string;
lastName: string;
role: 'admin' | 'manager' | 'user' | 'viewer';
phoneNumber?: string;
password?: string;
}
export interface UpdateUserRequest {
firstName?: string;
lastName?: string;
phoneNumber?: string;
isActive?: boolean;
}
export interface ChangePasswordRequest {
currentPassword: string;
newPassword: string;
}
export const usersApi = {
/**
* Get users in current organization
*/
async list(): Promise<User[]> {
return apiClient.get<User[]>('/api/v1/users');
},
/**
* Get user by ID
*/
async getById(id: string): Promise<User> {
return apiClient.get<User>(`/api/v1/users/${id}`);
},
/**
* Create/invite user
*/
async create(data: CreateUserRequest): Promise<User> {
return apiClient.post<User>('/api/v1/users', data);
},
/**
* Update user
*/
async update(id: string, data: UpdateUserRequest): Promise<User> {
return apiClient.patch<User>(`/api/v1/users/${id}`, data);
},
/**
* Change user role
*/
async changeRole(
id: string,
role: 'admin' | 'manager' | 'user' | 'viewer'
): Promise<User> {
return apiClient.patch<User>(`/api/v1/users/${id}/role`, { role });
},
/**
* Deactivate user
*/
async deactivate(id: string): Promise<void> {
return apiClient.patch<void>(`/api/v1/users/${id}`, { isActive: false });
},
/**
* Activate user
*/
async activate(id: string): Promise<void> {
return apiClient.patch<void>(`/api/v1/users/${id}`, { isActive: true });
},
/**
* Delete user
*/
async delete(id: string): Promise<void> {
return apiClient.delete<void>(`/api/v1/users/${id}`);
},
/**
* Change password
*/
async changePassword(data: ChangePasswordRequest): Promise<void> {
return apiClient.post<void>('/api/v1/users/change-password', data);
},
};