2
0

users.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import axios from 'axios';
  2. import type { User } from '../../share/types.ts';
  3. interface UsersResponse {
  4. data: User[];
  5. pagination: {
  6. total: number;
  7. current: number;
  8. pageSize: number;
  9. totalPages: number;
  10. };
  11. }
  12. interface UserResponse {
  13. data: User;
  14. message?: string;
  15. }
  16. interface UserCreateResponse {
  17. message: string;
  18. data: User;
  19. }
  20. interface UserUpdateResponse {
  21. message: string;
  22. data: User;
  23. }
  24. interface UserDeleteResponse {
  25. message: string;
  26. id: number;
  27. }
  28. export const UserAPI = {
  29. getUsers: async (params?: { page?: number, limit?: number, search?: string }): Promise<UsersResponse> => {
  30. try {
  31. const response = await axios.get('/users', { params });
  32. return response.data;
  33. } catch (error) {
  34. throw error;
  35. }
  36. },
  37. getUser: async (userId: number): Promise<UserResponse> => {
  38. try {
  39. const response = await axios.get(`/users/${userId}`);
  40. return response.data;
  41. } catch (error) {
  42. throw error;
  43. }
  44. },
  45. createUser: async (userData: Partial<User>): Promise<UserCreateResponse> => {
  46. try {
  47. const response = await axios.post('/users', userData);
  48. return response.data;
  49. } catch (error) {
  50. throw error;
  51. }
  52. },
  53. updateUser: async (userId: number, userData: Partial<User>): Promise<UserUpdateResponse> => {
  54. try {
  55. const response = await axios.put(`/users/${userId}`, userData);
  56. return response.data;
  57. } catch (error) {
  58. throw error;
  59. }
  60. },
  61. deleteUser: async (userId: number): Promise<UserDeleteResponse> => {
  62. try {
  63. const response = await axios.delete(`/users/${userId}`);
  64. return response.data;
  65. } catch (error) {
  66. throw error;
  67. }
  68. }
  69. };