@viridial/shared 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +114 -0
  2. package/USER-MODULE.md +268 -0
  3. package/dist/api/auth.service.d.ts +35 -0
  4. package/dist/api/auth.service.d.ts.map +1 -0
  5. package/dist/api/auth.service.js +63 -0
  6. package/dist/api/http.client.d.ts +19 -0
  7. package/dist/api/http.client.d.ts.map +1 -0
  8. package/dist/api/http.client.js +97 -0
  9. package/dist/api/property.service.d.ts +31 -0
  10. package/dist/api/property.service.d.ts.map +1 -0
  11. package/dist/api/property.service.js +47 -0
  12. package/dist/api/user.service.d.ts +86 -0
  13. package/dist/api/user.service.d.ts.map +1 -0
  14. package/dist/api/user.service.js +145 -0
  15. package/dist/composables/useAuth.d.ts +21 -0
  16. package/dist/composables/useAuth.d.ts.map +1 -0
  17. package/dist/composables/useAuth.js +43 -0
  18. package/dist/composables/useUser.d.ts +173 -0
  19. package/dist/composables/useUser.d.ts.map +1 -0
  20. package/dist/composables/useUser.js +132 -0
  21. package/dist/constants/api.constants.d.ts +32 -0
  22. package/dist/constants/api.constants.d.ts.map +1 -0
  23. package/dist/constants/api.constants.js +35 -0
  24. package/dist/index.d.ts +19 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +20 -0
  27. package/dist/stores/auth.store.d.ts +75 -0
  28. package/dist/stores/auth.store.d.ts.map +1 -0
  29. package/dist/stores/auth.store.js +71 -0
  30. package/dist/stores/user.store.d.ts +748 -0
  31. package/dist/stores/user.store.d.ts.map +1 -0
  32. package/dist/stores/user.store.js +264 -0
  33. package/dist/types/api.types.d.ts +27 -0
  34. package/dist/types/api.types.d.ts.map +1 -0
  35. package/dist/types/api.types.js +4 -0
  36. package/dist/types/auth.types.d.ts +38 -0
  37. package/dist/types/auth.types.d.ts.map +1 -0
  38. package/dist/types/auth.types.js +4 -0
  39. package/dist/types/property.types.d.ts +66 -0
  40. package/dist/types/property.types.d.ts.map +1 -0
  41. package/dist/types/property.types.js +20 -0
  42. package/dist/types/user.types.d.ts +103 -0
  43. package/dist/types/user.types.d.ts.map +1 -0
  44. package/dist/types/user.types.js +21 -0
  45. package/dist/utils/token.utils.d.ts +30 -0
  46. package/dist/utils/token.utils.d.ts.map +1 -0
  47. package/dist/utils/token.utils.js +56 -0
  48. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.store.d.ts","sourceRoot":"","sources":["../../stores/user.store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,264 @@
1
+ import { defineStore } from 'pinia';
2
+ import { ref, computed } from 'vue';
3
+ import { userService } from '../api/user.service';
4
+ import { UserStatus } from '../types/user.types';
5
+ /**
6
+ * Store pour la gestion des utilisateurs SaaS
7
+ */
8
+ export const useUserStore = defineStore('user', () => {
9
+ // State
10
+ const users = ref([]);
11
+ const currentUser = ref(null);
12
+ const selectedUser = ref(null);
13
+ const stats = ref(null);
14
+ const loading = ref(false);
15
+ const total = ref(0);
16
+ const currentPage = ref(1);
17
+ const pageSize = ref(20);
18
+ // Getters
19
+ const activeUsers = computed(() => {
20
+ return users.value.filter(user => user.status === UserStatus.ACTIVE);
21
+ });
22
+ const inactiveUsers = computed(() => {
23
+ return users.value.filter(user => user.status === UserStatus.INACTIVE);
24
+ });
25
+ const suspendedUsers = computed(() => {
26
+ return users.value.filter(user => user.status === UserStatus.SUSPENDED);
27
+ });
28
+ const usersByRole = computed(() => {
29
+ const grouped = {};
30
+ users.value.forEach(user => {
31
+ user.roles.forEach(role => {
32
+ if (!grouped[role]) {
33
+ grouped[role] = [];
34
+ }
35
+ grouped[role].push(user);
36
+ });
37
+ });
38
+ return grouped;
39
+ });
40
+ const hasRole = computed(() => (userId, role) => {
41
+ const user = users.value.find(u => u.id === userId);
42
+ return user?.roles.includes(role) || false;
43
+ });
44
+ const isCurrentUser = computed(() => (userId) => {
45
+ return currentUser.value?.id === userId;
46
+ });
47
+ // Actions
48
+ async function fetchUsers(params) {
49
+ loading.value = true;
50
+ try {
51
+ const result = await userService.getAll({
52
+ ...params,
53
+ page: currentPage.value - 1,
54
+ size: pageSize.value
55
+ });
56
+ users.value = result.users;
57
+ total.value = result.total;
58
+ }
59
+ catch (error) {
60
+ console.error('Error fetching users:', error);
61
+ throw error;
62
+ }
63
+ finally {
64
+ loading.value = false;
65
+ }
66
+ }
67
+ async function fetchUserById(id) {
68
+ loading.value = true;
69
+ try {
70
+ const user = await userService.getById(id);
71
+ selectedUser.value = user;
72
+ // Mettre à jour dans la liste si présent
73
+ const index = users.value.findIndex(u => u.id === id);
74
+ if (index !== -1) {
75
+ users.value[index] = user;
76
+ }
77
+ }
78
+ catch (error) {
79
+ console.error('Error fetching user:', error);
80
+ throw error;
81
+ }
82
+ finally {
83
+ loading.value = false;
84
+ }
85
+ }
86
+ async function fetchProfile() {
87
+ loading.value = true;
88
+ try {
89
+ currentUser.value = await userService.getProfile();
90
+ }
91
+ catch (error) {
92
+ console.error('Error fetching profile:', error);
93
+ throw error;
94
+ }
95
+ finally {
96
+ loading.value = false;
97
+ }
98
+ }
99
+ async function createUser(data) {
100
+ loading.value = true;
101
+ try {
102
+ const user = await userService.create(data);
103
+ users.value.push(user);
104
+ total.value++;
105
+ return user;
106
+ }
107
+ catch (error) {
108
+ console.error('Error creating user:', error);
109
+ throw error;
110
+ }
111
+ finally {
112
+ loading.value = false;
113
+ }
114
+ }
115
+ async function updateUser(id, data) {
116
+ loading.value = true;
117
+ try {
118
+ const user = await userService.update(id, data);
119
+ // Mettre à jour dans la liste
120
+ const index = users.value.findIndex(u => u.id === id);
121
+ if (index !== -1) {
122
+ users.value[index] = user;
123
+ }
124
+ // Mettre à jour selectedUser si c'est le même
125
+ if (selectedUser.value?.id === id) {
126
+ selectedUser.value = user;
127
+ }
128
+ // Mettre à jour currentUser si c'est le même
129
+ if (currentUser.value?.id === id) {
130
+ currentUser.value = { ...currentUser.value, ...user };
131
+ }
132
+ return user;
133
+ }
134
+ catch (error) {
135
+ console.error('Error updating user:', error);
136
+ throw error;
137
+ }
138
+ finally {
139
+ loading.value = false;
140
+ }
141
+ }
142
+ async function updateProfile(data) {
143
+ loading.value = true;
144
+ try {
145
+ currentUser.value = await userService.updateProfile(data);
146
+ return currentUser.value;
147
+ }
148
+ catch (error) {
149
+ console.error('Error updating profile:', error);
150
+ throw error;
151
+ }
152
+ finally {
153
+ loading.value = false;
154
+ }
155
+ }
156
+ async function deleteUser(id) {
157
+ loading.value = true;
158
+ try {
159
+ await userService.delete(id);
160
+ users.value = users.value.filter(u => u.id !== id);
161
+ total.value--;
162
+ if (selectedUser.value?.id === id) {
163
+ selectedUser.value = null;
164
+ }
165
+ }
166
+ catch (error) {
167
+ console.error('Error deleting user:', error);
168
+ throw error;
169
+ }
170
+ finally {
171
+ loading.value = false;
172
+ }
173
+ }
174
+ async function activateUser(id) {
175
+ return updateUserStatus(id, () => userService.activate(id));
176
+ }
177
+ async function deactivateUser(id) {
178
+ return updateUserStatus(id, () => userService.deactivate(id));
179
+ }
180
+ async function suspendUser(id, reason) {
181
+ return updateUserStatus(id, () => userService.suspend(id, reason));
182
+ }
183
+ async function fetchStats() {
184
+ try {
185
+ stats.value = await userService.getStats();
186
+ }
187
+ catch (error) {
188
+ console.error('Error fetching stats:', error);
189
+ throw error;
190
+ }
191
+ }
192
+ function setPage(page) {
193
+ currentPage.value = page;
194
+ }
195
+ function setPageSize(size) {
196
+ pageSize.value = size;
197
+ currentPage.value = 1;
198
+ }
199
+ function clearUsers() {
200
+ users.value = [];
201
+ total.value = 0;
202
+ selectedUser.value = null;
203
+ }
204
+ function setSelectedUser(user) {
205
+ selectedUser.value = user;
206
+ }
207
+ // Helper function
208
+ async function updateUserStatus(id, action) {
209
+ loading.value = true;
210
+ try {
211
+ const user = await action();
212
+ // Mettre à jour dans la liste
213
+ const index = users.value.findIndex(u => u.id === id);
214
+ if (index !== -1) {
215
+ users.value[index] = user;
216
+ }
217
+ if (selectedUser.value?.id === id) {
218
+ selectedUser.value = user;
219
+ }
220
+ return user;
221
+ }
222
+ catch (error) {
223
+ console.error('Error updating user status:', error);
224
+ throw error;
225
+ }
226
+ finally {
227
+ loading.value = false;
228
+ }
229
+ }
230
+ return {
231
+ // State
232
+ users,
233
+ currentUser,
234
+ selectedUser,
235
+ stats,
236
+ loading,
237
+ total,
238
+ currentPage,
239
+ pageSize,
240
+ // Getters
241
+ activeUsers,
242
+ inactiveUsers,
243
+ suspendedUsers,
244
+ usersByRole,
245
+ hasRole,
246
+ isCurrentUser,
247
+ // Actions
248
+ fetchUsers,
249
+ fetchUserById,
250
+ fetchProfile,
251
+ createUser,
252
+ updateUser,
253
+ updateProfile,
254
+ deleteUser,
255
+ activateUser,
256
+ deactivateUser,
257
+ suspendUser,
258
+ fetchStats,
259
+ setPage,
260
+ setPageSize,
261
+ clearUsers,
262
+ setSelectedUser
263
+ };
264
+ });
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Types génériques pour les réponses API
3
+ */
4
+ export interface ApiResponse<T = any> {
5
+ data: T;
6
+ status: number;
7
+ message?: string;
8
+ }
9
+ export interface ApiError {
10
+ message: string;
11
+ status: number;
12
+ data?: any;
13
+ }
14
+ export interface PaginatedResponse<T> {
15
+ content: T[];
16
+ totalElements: number;
17
+ totalPages: number;
18
+ size: number;
19
+ number: number;
20
+ }
21
+ export interface ApiListResponse<T> {
22
+ items: T[];
23
+ total: number;
24
+ page: number;
25
+ pageSize: number;
26
+ }
27
+ //# sourceMappingURL=api.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.types.d.ts","sourceRoot":"","sources":["../../types/api.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,IAAI,EAAE,CAAC,CAAA;IACP,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,GAAG,CAAA;CACX;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Types génériques pour les réponses API
3
+ */
4
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Types pour l'authentification
3
+ */
4
+ export interface LoginRequest {
5
+ email: string;
6
+ password: string;
7
+ }
8
+ export interface LoginResponse {
9
+ token: string;
10
+ refreshToken?: string;
11
+ user: UserInfo;
12
+ }
13
+ export interface SignupRequest {
14
+ name: string;
15
+ email: string;
16
+ password: string;
17
+ confirmPassword?: string;
18
+ }
19
+ export interface SignupResponse {
20
+ message: string;
21
+ user?: UserInfo;
22
+ }
23
+ export interface ForgotPasswordRequest {
24
+ email: string;
25
+ }
26
+ export interface ResetPasswordRequest {
27
+ token: string;
28
+ password: string;
29
+ confirmPassword: string;
30
+ }
31
+ export interface UserInfo {
32
+ id: number;
33
+ email: string;
34
+ name: string;
35
+ roles?: string[];
36
+ organizationId?: number;
37
+ }
38
+ //# sourceMappingURL=auth.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../../types/auth.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,QAAQ,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Types pour l'authentification
3
+ */
4
+ export {};
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Types pour les propriétés
3
+ */
4
+ export interface Property {
5
+ id: number;
6
+ title: string;
7
+ description: string;
8
+ price: number;
9
+ address: string;
10
+ city: string;
11
+ country: string;
12
+ propertyType: PropertyType;
13
+ status: PropertyStatus;
14
+ bedrooms?: number;
15
+ bathrooms?: number;
16
+ area?: number;
17
+ images?: string[];
18
+ createdAt: string;
19
+ updatedAt: string;
20
+ createdBy?: number;
21
+ }
22
+ export interface PropertyCreate {
23
+ title: string;
24
+ description: string;
25
+ price: number;
26
+ address: string;
27
+ city: string;
28
+ country: string;
29
+ propertyType: PropertyType;
30
+ bedrooms?: number;
31
+ bathrooms?: number;
32
+ area?: number;
33
+ images?: string[];
34
+ }
35
+ export interface PropertyUpdate extends Partial<PropertyCreate> {
36
+ status?: PropertyStatus;
37
+ }
38
+ export interface PropertySearchParams {
39
+ city?: string;
40
+ country?: string;
41
+ propertyType?: PropertyType;
42
+ minPrice?: number;
43
+ maxPrice?: number;
44
+ bedrooms?: number;
45
+ bathrooms?: number;
46
+ status?: PropertyStatus;
47
+ search?: string;
48
+ page?: number;
49
+ size?: number;
50
+ }
51
+ export declare enum PropertyType {
52
+ APARTMENT = "APARTMENT",
53
+ HOUSE = "HOUSE",
54
+ VILLA = "VILLA",
55
+ LAND = "LAND",
56
+ COMMERCIAL = "COMMERCIAL",
57
+ OTHER = "OTHER"
58
+ }
59
+ export declare enum PropertyStatus {
60
+ AVAILABLE = "AVAILABLE",
61
+ SOLD = "SOLD",
62
+ RENTED = "RENTED",
63
+ PENDING = "PENDING",
64
+ DRAFT = "DRAFT"
65
+ }
66
+ //# sourceMappingURL=property.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property.types.d.ts","sourceRoot":"","sources":["../../types/property.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,cAAc,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,OAAO,CAAC,cAAc,CAAC;IAC7D,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,oBAAY,YAAY;IACtB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,KAAK,UAAU;CAChB;AAED,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Types pour les propriétés
3
+ */
4
+ export var PropertyType;
5
+ (function (PropertyType) {
6
+ PropertyType["APARTMENT"] = "APARTMENT";
7
+ PropertyType["HOUSE"] = "HOUSE";
8
+ PropertyType["VILLA"] = "VILLA";
9
+ PropertyType["LAND"] = "LAND";
10
+ PropertyType["COMMERCIAL"] = "COMMERCIAL";
11
+ PropertyType["OTHER"] = "OTHER";
12
+ })(PropertyType || (PropertyType = {}));
13
+ export var PropertyStatus;
14
+ (function (PropertyStatus) {
15
+ PropertyStatus["AVAILABLE"] = "AVAILABLE";
16
+ PropertyStatus["SOLD"] = "SOLD";
17
+ PropertyStatus["RENTED"] = "RENTED";
18
+ PropertyStatus["PENDING"] = "PENDING";
19
+ PropertyStatus["DRAFT"] = "DRAFT";
20
+ })(PropertyStatus || (PropertyStatus = {}));
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Types pour la gestion des utilisateurs SaaS
3
+ */
4
+ export interface User {
5
+ id: number;
6
+ email: string;
7
+ name: string;
8
+ firstName?: string;
9
+ lastName?: string;
10
+ phone?: string;
11
+ avatar?: string;
12
+ status: UserStatus;
13
+ roles: UserRole[];
14
+ organizationId?: number;
15
+ organizationName?: string;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ lastLoginAt?: string;
19
+ emailVerified: boolean;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export interface UserCreate {
23
+ email: string;
24
+ name: string;
25
+ firstName?: string;
26
+ lastName?: string;
27
+ phone?: string;
28
+ password: string;
29
+ roles?: UserRole[];
30
+ organizationId?: number;
31
+ status?: UserStatus;
32
+ metadata?: Record<string, any>;
33
+ }
34
+ export interface UserUpdate {
35
+ name?: string;
36
+ firstName?: string;
37
+ lastName?: string;
38
+ phone?: string;
39
+ avatar?: string;
40
+ status?: UserStatus;
41
+ roles?: UserRole[];
42
+ organizationId?: number;
43
+ metadata?: Record<string, any>;
44
+ }
45
+ export interface UserSearchParams {
46
+ search?: string;
47
+ email?: string;
48
+ status?: UserStatus;
49
+ role?: UserRole;
50
+ organizationId?: number;
51
+ page?: number;
52
+ size?: number;
53
+ sort?: string;
54
+ }
55
+ export interface UserProfile extends User {
56
+ preferences?: UserPreferences;
57
+ notifications?: NotificationSettings;
58
+ }
59
+ export interface UserPreferences {
60
+ language: string;
61
+ timezone: string;
62
+ theme: 'light' | 'dark' | 'auto';
63
+ emailNotifications: boolean;
64
+ }
65
+ export interface NotificationSettings {
66
+ email: boolean;
67
+ push: boolean;
68
+ sms: boolean;
69
+ marketing: boolean;
70
+ }
71
+ export declare enum UserStatus {
72
+ ACTIVE = "ACTIVE",
73
+ INACTIVE = "INACTIVE",
74
+ SUSPENDED = "SUSPENDED",
75
+ PENDING = "PENDING",
76
+ DELETED = "DELETED"
77
+ }
78
+ export declare enum UserRole {
79
+ SUPER_ADMIN = "SUPER_ADMIN",
80
+ ADMIN = "ADMIN",
81
+ AGENT = "AGENT",
82
+ FREELANCE = "FREELANCE",
83
+ AUTO_ENTREPRENEUR = "AUTO_ENTREPRENEUR",
84
+ PARTICULAR = "PARTICULAR",
85
+ USER = "USER"
86
+ }
87
+ export interface UserActivity {
88
+ id: number;
89
+ userId: number;
90
+ action: string;
91
+ description: string;
92
+ ipAddress?: string;
93
+ userAgent?: string;
94
+ createdAt: string;
95
+ }
96
+ export interface UserStats {
97
+ totalUsers: number;
98
+ activeUsers: number;
99
+ newUsersThisMonth: number;
100
+ usersByRole: Record<UserRole, number>;
101
+ usersByStatus: Record<UserStatus, number>;
102
+ }
103
+ //# sourceMappingURL=user.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.types.d.ts","sourceRoot":"","sources":["../../types/user.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Types pour la gestion des utilisateurs SaaS
3
+ */
4
+ export var UserStatus;
5
+ (function (UserStatus) {
6
+ UserStatus["ACTIVE"] = "ACTIVE";
7
+ UserStatus["INACTIVE"] = "INACTIVE";
8
+ UserStatus["SUSPENDED"] = "SUSPENDED";
9
+ UserStatus["PENDING"] = "PENDING";
10
+ UserStatus["DELETED"] = "DELETED";
11
+ })(UserStatus || (UserStatus = {}));
12
+ export var UserRole;
13
+ (function (UserRole) {
14
+ UserRole["SUPER_ADMIN"] = "SUPER_ADMIN";
15
+ UserRole["ADMIN"] = "ADMIN";
16
+ UserRole["AGENT"] = "AGENT";
17
+ UserRole["FREELANCE"] = "FREELANCE";
18
+ UserRole["AUTO_ENTREPRENEUR"] = "AUTO_ENTREPRENEUR";
19
+ UserRole["PARTICULAR"] = "PARTICULAR";
20
+ UserRole["USER"] = "USER";
21
+ })(UserRole || (UserRole = {}));
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Utilitaires pour la gestion des tokens JWT
3
+ */
4
+ export declare const tokenUtils: {
5
+ /**
6
+ * Stocker le token
7
+ */
8
+ setToken(token: string): void;
9
+ /**
10
+ * Récupérer le token
11
+ */
12
+ getToken(): string | null;
13
+ /**
14
+ * Supprimer le token
15
+ */
16
+ removeToken(): void;
17
+ /**
18
+ * Vérifier si un token existe
19
+ */
20
+ hasToken(): boolean;
21
+ /**
22
+ * Stocker le refresh token
23
+ */
24
+ setRefreshToken(token: string): void;
25
+ /**
26
+ * Récupérer le refresh token
27
+ */
28
+ getRefreshToken(): string | null;
29
+ };
30
+ //# sourceMappingURL=token.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.utils.d.ts","sourceRoot":"","sources":["../../utils/token.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,eAAO,MAAM,UAAU;IACrB;;OAEG;oBACa,MAAM,GAAG,IAAI;IAM7B;;OAEG;gBACS,MAAM,GAAG,IAAI;IAOzB;;OAEG;mBACY,IAAI;IAOnB;;OAEG;gBACS,OAAO;IAInB;;OAEG;2BACoB,MAAM,GAAG,IAAI;IAMpC;;OAEG;uBACgB,MAAM,GAAG,IAAI;CAMjC,CAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Utilitaires pour la gestion des tokens JWT
3
+ */
4
+ const TOKEN_KEY = 'auth_token';
5
+ const REFRESH_TOKEN_KEY = 'refresh_token';
6
+ export const tokenUtils = {
7
+ /**
8
+ * Stocker le token
9
+ */
10
+ setToken(token) {
11
+ if (typeof window !== 'undefined') {
12
+ localStorage.setItem(TOKEN_KEY, token);
13
+ }
14
+ },
15
+ /**
16
+ * Récupérer le token
17
+ */
18
+ getToken() {
19
+ if (typeof window !== 'undefined') {
20
+ return localStorage.getItem(TOKEN_KEY);
21
+ }
22
+ return null;
23
+ },
24
+ /**
25
+ * Supprimer le token
26
+ */
27
+ removeToken() {
28
+ if (typeof window !== 'undefined') {
29
+ localStorage.removeItem(TOKEN_KEY);
30
+ localStorage.removeItem(REFRESH_TOKEN_KEY);
31
+ }
32
+ },
33
+ /**
34
+ * Vérifier si un token existe
35
+ */
36
+ hasToken() {
37
+ return this.getToken() !== null;
38
+ },
39
+ /**
40
+ * Stocker le refresh token
41
+ */
42
+ setRefreshToken(token) {
43
+ if (typeof window !== 'undefined') {
44
+ localStorage.setItem(REFRESH_TOKEN_KEY, token);
45
+ }
46
+ },
47
+ /**
48
+ * Récupérer le refresh token
49
+ */
50
+ getRefreshToken() {
51
+ if (typeof window !== 'undefined') {
52
+ return localStorage.getItem(REFRESH_TOKEN_KEY);
53
+ }
54
+ return null;
55
+ }
56
+ };