-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi-service.js
143 lines (123 loc) · 4.38 KB
/
api-service.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
class ApiService {
constructor() {
this.baseUrl = 'http://localhost:5000/api';
this.baseUrl = 'http://localhost:5000/api';
}
// Generic method to handle API errors
handleError(error) {
console.error('API Error:', error);
if (error.response) {
throw new Error(error.response.data.message || 'حدث خطأ في الخادم');
}
throw new Error('حدث خطأ في الاتصال بالخادم');
}
// Generic GET request
async get(endpoint) {
try {
const response = await fetch(`${this.baseUrl}${endpoint}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
// Add auth header if user is logged in
...(authService.isAuthenticated() && {
'Authorization': `Bearer ${authService.getCurrentUser().token}`
})
}
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'حدث خطأ في الخادم');
}
return await response.json();
} catch (error) {
this.handleError(error);
}
}
// Generic POST request
async post(endpoint, data) {
try {
const response = await fetch(`${this.baseUrl}${endpoint}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// Add auth header if user is logged in
...(authService.isAuthenticated() && {
'Authorization': `Bearer ${authService.getCurrentUser().token}`
})
},
body: JSON.stringify(data)
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'حدث خطأ في الخادم');
}
return await response.json();
} catch (error) {
this.handleError(error);
}
}
// Generic PUT request
async put(endpoint, data) {
try {
const response = await fetch(`${this.baseUrl}${endpoint}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
// Add auth header if user is logged in
...(authService.isAuthenticated() && {
'Authorization': `Bearer ${authService.getCurrentUser().token}`
})
},
body: JSON.stringify(data)
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'حدث خطأ في الخادم');
}
return await response.json();
} catch (error) {
this.handleError(error);
}
}
// Generic DELETE request
async delete(endpoint) {
try {
const response = await fetch(`${this.baseUrl}${endpoint}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
// Add auth header if user is logged in
...(authService.isAuthenticated() && {
'Authorization': `Bearer ${authService.getCurrentUser().token}`
})
}
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'حدث خطأ في الخادم');
}
return await response.json();
} catch (error) {
this.handleError(error);
}
}
// Auth endpoints
async login(credentials) {
return this.post('/Auth/login', credentials);
}
async register(userData) {
return this.post('/Auth/register', userData);
}
// Users endpoints
async getCurrentUser() {
return this.get('/Users/current');
}
async updateUser(userId, userData) {
return this.put(`/Users/${userId}`, userData);
}
async deleteUser(userId) {
return this.delete(`/Users/${userId}`);
}
}
// Create a single instance to be used across the application
const apiService = new ApiService();