users.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. interface UserConvertResponse {
  29. message: string;
  30. data: User;
  31. }
  32. export const UserAPI = {
  33. getUsers: async (
  34. params?: { page?: number; limit?: number; search?: string },
  35. ): Promise<UsersResponse> => {
  36. try {
  37. const response = await axios.get("/users", { params });
  38. return response.data;
  39. } catch (error) {
  40. throw error;
  41. }
  42. },
  43. getUser: async (userId: number): Promise<UserResponse> => {
  44. try {
  45. const response = await axios.get(`/users/${userId}`);
  46. return response.data;
  47. } catch (error) {
  48. throw error;
  49. }
  50. },
  51. createUser: async (userData: Partial<User>): Promise<UserCreateResponse> => {
  52. try {
  53. const response = await axios.post("/users", userData);
  54. return response.data;
  55. } catch (error) {
  56. throw error;
  57. }
  58. },
  59. updateUser: async (
  60. userId: number,
  61. userData: Partial<User>,
  62. ): Promise<UserUpdateResponse> => {
  63. try {
  64. const response = await axios.put(`/users/${userId}`, userData);
  65. return response.data;
  66. } catch (error) {
  67. throw error;
  68. }
  69. },
  70. deleteUser: async (userId: number): Promise<UserDeleteResponse> => {
  71. try {
  72. const response = await axios.delete(`/users/${userId}`);
  73. return response.data;
  74. } catch (error) {
  75. throw error;
  76. }
  77. },
  78. convertToStudent: async (userId: number): Promise<UserConvertResponse> => {
  79. try {
  80. const response = await axios.post(`/users/${userId}/convert-to-student`, {});
  81. return response.data;
  82. } catch (error) {
  83. throw error;
  84. }
  85. },
  86. };