@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.
- package/README.md +114 -0
- package/USER-MODULE.md +268 -0
- package/dist/api/auth.service.d.ts +35 -0
- package/dist/api/auth.service.d.ts.map +1 -0
- package/dist/api/auth.service.js +63 -0
- package/dist/api/http.client.d.ts +19 -0
- package/dist/api/http.client.d.ts.map +1 -0
- package/dist/api/http.client.js +97 -0
- package/dist/api/property.service.d.ts +31 -0
- package/dist/api/property.service.d.ts.map +1 -0
- package/dist/api/property.service.js +47 -0
- package/dist/api/user.service.d.ts +86 -0
- package/dist/api/user.service.d.ts.map +1 -0
- package/dist/api/user.service.js +145 -0
- package/dist/composables/useAuth.d.ts +21 -0
- package/dist/composables/useAuth.d.ts.map +1 -0
- package/dist/composables/useAuth.js +43 -0
- package/dist/composables/useUser.d.ts +173 -0
- package/dist/composables/useUser.d.ts.map +1 -0
- package/dist/composables/useUser.js +132 -0
- package/dist/constants/api.constants.d.ts +32 -0
- package/dist/constants/api.constants.d.ts.map +1 -0
- package/dist/constants/api.constants.js +35 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/stores/auth.store.d.ts +75 -0
- package/dist/stores/auth.store.d.ts.map +1 -0
- package/dist/stores/auth.store.js +71 -0
- package/dist/stores/user.store.d.ts +748 -0
- package/dist/stores/user.store.d.ts.map +1 -0
- package/dist/stores/user.store.js +264 -0
- package/dist/types/api.types.d.ts +27 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +4 -0
- package/dist/types/auth.types.d.ts +38 -0
- package/dist/types/auth.types.d.ts.map +1 -0
- package/dist/types/auth.types.js +4 -0
- package/dist/types/property.types.d.ts +66 -0
- package/dist/types/property.types.d.ts.map +1 -0
- package/dist/types/property.types.js +20 -0
- package/dist/types/user.types.d.ts +103 -0
- package/dist/types/user.types.d.ts.map +1 -0
- package/dist/types/user.types.js +21 -0
- package/dist/utils/token.utils.d.ts +30 -0
- package/dist/utils/token.utils.d.ts.map +1 -0
- package/dist/utils/token.utils.js +56 -0
- 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,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,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
|
+
};
|