88 lines
3.5 KiB
JavaScript
88 lines
3.5 KiB
JavaScript
import api from './apiClient';
|
|
|
|
// -----------------------------
|
|
// Users API با رولها
|
|
// -----------------------------
|
|
const USERS_STORAGE_KEY = 'app_users_v1';
|
|
function readUsersFromStorage(){ try{ const raw = localStorage.getItem(USERS_STORAGE_KEY); return raw?JSON.parse(raw):[]; } catch{return [];} }
|
|
function writeUsersToStorage(users){ localStorage.setItem(USERS_STORAGE_KEY, JSON.stringify(users)); }
|
|
|
|
export const usersAPI = {
|
|
async list({searchQuery='',currentPage=1,pageSize=100}={}) {
|
|
try {
|
|
// اطمینان از اینکه params همیشه object است
|
|
const params = {
|
|
searchQuery: searchQuery || '',
|
|
currentPage: currentPage || 1,
|
|
pageSize: pageSize || 100
|
|
};
|
|
|
|
console.log('🔵 Users API - list request:', {
|
|
url: '/api/v1/User',
|
|
method: 'GET',
|
|
params
|
|
});
|
|
|
|
const res = await api.get('/api/v1/User',{
|
|
params,
|
|
skipAuthRedirect:true
|
|
});
|
|
|
|
console.log('🟢 Users API - list response:', res?.data);
|
|
|
|
return res?.data?.data?.data||[];
|
|
} catch (error) {
|
|
console.error('🔴 Users API - list error:', error);
|
|
console.error('🔴 Error details:', {
|
|
url: error.config?.url,
|
|
method: error.config?.method,
|
|
params: error.config?.params,
|
|
data: error.config?.data,
|
|
response: error.response?.data
|
|
});
|
|
throw error;
|
|
}
|
|
},
|
|
async get(id){
|
|
if (!id) throw new Error('User ID is required');
|
|
const res = await api.get(`/api/v1/User/${encodeURIComponent(id)}`, { skipAuthRedirect: true });
|
|
return res?.data?.data || res?.data;
|
|
},
|
|
async create(user){
|
|
const payload = { firstName:String(user?.firstName||''), lastName:String(user?.lastName||''), email:String(user?.email||''), mobile:String(user?.mobile||''), isActive:!!user?.isActive };
|
|
const res = await api.post('/api/v1/User',payload,{skipAuthRedirect:true});
|
|
return res?.data;
|
|
},
|
|
async update(id,user){
|
|
const payload = { firstName:String(user?.firstName||''), lastName:String(user?.lastName||''), email:String(user?.email||''), mobile:String(user?.mobile||''), isActive:!!user?.isActive };
|
|
const res = await api.put(`/api/v1/User/${encodeURIComponent(id)}`,payload,{skipAuthRedirect:true});
|
|
return res?.data;
|
|
},
|
|
async remove(id){
|
|
const res = await api.delete(`/api/v1/User/Delete/${encodeURIComponent(id)}/Role`,{skipAuthRedirect:true});
|
|
return res?.data;
|
|
},
|
|
async toggleActivation(id){ const res = await api.patch(`/api/v1/User/${encodeURIComponent(id)}/ToggleActivation`,null,{skipAuthRedirect:true}); return res?.data; },
|
|
async resetPassword(id){ const res = await api.patch(`/api/v1/User/${encodeURIComponent(id)}/ResetPassword`,null,{skipAuthRedirect:true}); return res?.data; },
|
|
async getRoles(userId){
|
|
try {
|
|
const res = await api.get(`/api/v1/User/${encodeURIComponent(userId)}/Role`, { skipAuthRedirect: true });
|
|
return res?.data?.data || [];
|
|
} catch(err) {
|
|
console.error(err);
|
|
return [];
|
|
}
|
|
},
|
|
async removeRole(userId,roleId){ try{ const res = await api.delete(`/api/v1/User/${encodeURIComponent(userId)}/Role/${encodeURIComponent(roleId)}`,{skipAuthRedirect:true}); return res?.data; } catch(err){ console.error(err); return null; } },
|
|
async updateRoles(userId,roleIds=[]){
|
|
try{
|
|
const res = await api.put(`/api/v1/User/${encodeURIComponent(userId)}/Role`,{roleIds},{skipAuthRedirect:true});
|
|
return res?.data;
|
|
} catch(err){
|
|
console.error(err);
|
|
return null;
|
|
}
|
|
},
|
|
};
|
|
|