Initial commit
This commit is contained in:
269
services/userService.ts
Normal file
269
services/userService.ts
Normal file
@@ -0,0 +1,269 @@
|
||||
import { apiService } from './api';
|
||||
import type { User, UserRole } from '../types/auth';
|
||||
|
||||
interface CreateUserRequest {
|
||||
email: string;
|
||||
nom: string;
|
||||
prenom: string;
|
||||
role: UserRole;
|
||||
entreprise?: string;
|
||||
siret?: string;
|
||||
secteurActivite?: string;
|
||||
}
|
||||
|
||||
interface UpdateUserRequest {
|
||||
nom?: string;
|
||||
prenom?: string;
|
||||
entreprise?: string;
|
||||
siret?: string;
|
||||
secteurActivite?: string;
|
||||
actif?: boolean;
|
||||
}
|
||||
|
||||
interface UserStats {
|
||||
totalUsers: number;
|
||||
activeUsers: number;
|
||||
pendingUsers: number;
|
||||
usersByRole: Record<UserRole, number>;
|
||||
recentActivity: UserActivity[];
|
||||
}
|
||||
|
||||
interface UserActivity {
|
||||
userId: string;
|
||||
userName: string;
|
||||
action: string;
|
||||
timestamp: string;
|
||||
details?: string;
|
||||
}
|
||||
|
||||
class UserService {
|
||||
/**
|
||||
* Récupérer tous les utilisateurs
|
||||
*/
|
||||
async getAllUsers(): Promise<User[]> {
|
||||
try {
|
||||
const response = await apiService.api.get('/users');
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des utilisateurs:', error);
|
||||
// Retourner des données mockées en attendant l'API
|
||||
return this.getMockUsers();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer un utilisateur par ID
|
||||
*/
|
||||
async getUserById(id: string): Promise<User> {
|
||||
try {
|
||||
const response = await apiService.api.get(`/users/${id}`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération de l\'utilisateur:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Créer un nouvel utilisateur
|
||||
*/
|
||||
async createUser(userData: CreateUserRequest): Promise<User> {
|
||||
try {
|
||||
const response = await apiService.api.post('/users', userData);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la création de l\'utilisateur:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mettre à jour un utilisateur
|
||||
*/
|
||||
async updateUser(id: string, userData: UpdateUserRequest): Promise<User> {
|
||||
try {
|
||||
const response = await apiService.api.put(`/users/${id}`, userData);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la mise à jour de l\'utilisateur:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprimer un utilisateur
|
||||
*/
|
||||
async deleteUser(id: string): Promise<void> {
|
||||
try {
|
||||
await apiService.api.delete(`/users/${id}`);
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la suppression de l\'utilisateur:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les gestionnaires de projet
|
||||
*/
|
||||
async getGestionnaires(): Promise<User[]> {
|
||||
try {
|
||||
const response = await apiService.api.get('/users/gestionnaires');
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des gestionnaires:', error);
|
||||
// Retourner des données mockées
|
||||
return this.getMockGestionnaires();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les statistiques utilisateurs
|
||||
*/
|
||||
async getUserStats(): Promise<UserStats> {
|
||||
try {
|
||||
const response = await apiService.api.get('/users/stats');
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des statistiques:', error);
|
||||
return this.getMockUserStats();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer l'activité récente des utilisateurs
|
||||
*/
|
||||
async getUserActivity(): Promise<UserActivity[]> {
|
||||
try {
|
||||
const response = await apiService.api.get('/users/activity');
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération de l\'activité:', error);
|
||||
return this.getMockUserActivity();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Données mockées pour les utilisateurs
|
||||
*/
|
||||
private getMockUsers(): User[] {
|
||||
return [
|
||||
{
|
||||
id: 'admin-1',
|
||||
email: 'admin@btpxpress.com',
|
||||
nom: 'Administrateur',
|
||||
prenom: 'Système',
|
||||
role: UserRole.ADMIN,
|
||||
actif: true,
|
||||
status: 'APPROVED' as any,
|
||||
entreprise: 'BTP Xpress',
|
||||
dateCreation: '2024-01-01T00:00:00Z'
|
||||
},
|
||||
{
|
||||
id: 'manager-1',
|
||||
email: 'manager@btpxpress.com',
|
||||
nom: 'Dupont',
|
||||
prenom: 'Jean',
|
||||
role: UserRole.MANAGER,
|
||||
actif: true,
|
||||
status: 'APPROVED' as any,
|
||||
entreprise: 'BTP Xpress',
|
||||
dateCreation: '2024-01-15T00:00:00Z'
|
||||
},
|
||||
{
|
||||
id: 'gest-1',
|
||||
email: 'john.doe@btpxpress.com',
|
||||
nom: 'Doe',
|
||||
prenom: 'John',
|
||||
role: UserRole.GESTIONNAIRE_PROJET,
|
||||
actif: true,
|
||||
status: 'APPROVED' as any,
|
||||
entreprise: 'BTP Xpress',
|
||||
dateCreation: '2024-02-01T00:00:00Z',
|
||||
clientsAttribues: ['client-1', 'client-2']
|
||||
},
|
||||
{
|
||||
id: 'gest-2',
|
||||
email: 'marie.martin@btpxpress.com',
|
||||
nom: 'Martin',
|
||||
prenom: 'Marie',
|
||||
role: UserRole.GESTIONNAIRE_PROJET,
|
||||
actif: true,
|
||||
status: 'APPROVED' as any,
|
||||
entreprise: 'BTP Xpress',
|
||||
dateCreation: '2024-02-15T00:00:00Z',
|
||||
clientsAttribues: ['client-3']
|
||||
},
|
||||
{
|
||||
id: 'client-1',
|
||||
email: 'client1@example.com',
|
||||
nom: 'Dupont',
|
||||
prenom: 'Pierre',
|
||||
role: UserRole.CLIENT,
|
||||
actif: true,
|
||||
status: 'APPROVED' as any,
|
||||
dateCreation: '2024-03-01T00:00:00Z',
|
||||
clientId: 'client-1'
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Données mockées pour les gestionnaires
|
||||
*/
|
||||
private getMockGestionnaires(): User[] {
|
||||
return this.getMockUsers().filter(user => user.role === UserRole.GESTIONNAIRE_PROJET);
|
||||
}
|
||||
|
||||
/**
|
||||
* Statistiques mockées
|
||||
*/
|
||||
private getMockUserStats(): UserStats {
|
||||
const users = this.getMockUsers();
|
||||
return {
|
||||
totalUsers: users.length,
|
||||
activeUsers: users.filter(u => u.actif).length,
|
||||
pendingUsers: users.filter(u => u.status === 'PENDING').length,
|
||||
usersByRole: {
|
||||
[UserRole.ADMIN]: users.filter(u => u.role === UserRole.ADMIN).length,
|
||||
[UserRole.MANAGER]: users.filter(u => u.role === UserRole.MANAGER).length,
|
||||
[UserRole.GESTIONNAIRE_PROJET]: users.filter(u => u.role === UserRole.GESTIONNAIRE_PROJET).length,
|
||||
[UserRole.CHEF_CHANTIER]: users.filter(u => u.role === UserRole.CHEF_CHANTIER).length,
|
||||
[UserRole.OUVRIER]: users.filter(u => u.role === UserRole.OUVRIER).length,
|
||||
[UserRole.COMPTABLE]: users.filter(u => u.role === UserRole.COMPTABLE).length,
|
||||
[UserRole.CLIENT]: users.filter(u => u.role === UserRole.CLIENT).length
|
||||
},
|
||||
recentActivity: this.getMockUserActivity()
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Activité mockée
|
||||
*/
|
||||
private getMockUserActivity(): UserActivity[] {
|
||||
return [
|
||||
{
|
||||
userId: 'gest-1',
|
||||
userName: 'John Doe',
|
||||
action: 'Connexion',
|
||||
timestamp: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
|
||||
details: 'Dashboard gestionnaire'
|
||||
},
|
||||
{
|
||||
userId: 'client-1',
|
||||
userName: 'Pierre Dupont',
|
||||
action: 'Consultation projet',
|
||||
timestamp: new Date(Date.now() - 1000 * 60 * 60).toISOString(),
|
||||
details: 'Extension maison individuelle'
|
||||
},
|
||||
{
|
||||
userId: 'manager-1',
|
||||
userName: 'Jean Dupont',
|
||||
action: 'Attribution client',
|
||||
timestamp: new Date(Date.now() - 1000 * 60 * 60 * 2).toISOString(),
|
||||
details: 'Client attribué à Marie Martin'
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
export default new UserService();
|
||||
Reference in New Issue
Block a user