api.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import axios from "axios";
  2. import { apiUrl } from "@/env";
  3. import type { IUserProfile, IUserProfileUpdate, IUserProfileCreate, Video, VideoCreate, ArticleCreate, ImageDownload } from "@/interfaces";
  4. function authHeaders(token: string) {
  5. return {
  6. headers: {
  7. Authorization: `Bearer ${token}`,
  8. },
  9. };
  10. }
  11. export const api = {
  12. async logInGetToken(username: string, password: string) {
  13. const params = new URLSearchParams();
  14. params.append("username", username);
  15. params.append("password", password);
  16. return axios.post(`${apiUrl}/api/v1/login/access-token`, params);
  17. },
  18. async getMe(token: string) {
  19. return axios.get<IUserProfile>(`${apiUrl}/api/v1/users/me`, authHeaders(token));
  20. },
  21. async updateMe(token: string, data: IUserProfileUpdate) {
  22. return axios.put<IUserProfile>(
  23. `${apiUrl}/api/v1/users/me`,
  24. data,
  25. authHeaders(token),
  26. );
  27. },
  28. async getUsers(token: string) {
  29. return axios.get<IUserProfile[]>(`${apiUrl}/api/v1/users/`, authHeaders(token));
  30. },
  31. async updateUser(token: string, userId: number, data: IUserProfileUpdate) {
  32. return axios.put(`${apiUrl}/api/v1/users/${userId}`, data, authHeaders(token));
  33. },
  34. async createUser(token: string, data: IUserProfileCreate) {
  35. return axios.post(`${apiUrl}/api/v1/users/create`, data, authHeaders(token));
  36. },
  37. async passwordRecovery(email: string) {
  38. return axios.post(`${apiUrl}/api/v1/password-recovery/${email}`);
  39. },
  40. async resetPassword(token: string, password: string) {
  41. return axios.post(`${apiUrl}/api/v1/reset-password/`, {
  42. token: token,
  43. new_password: password,
  44. });
  45. },
  46. async registerUser(data: IUserProfileCreate) {
  47. return axios.post(`${apiUrl}/api/v1/users/open`, data);
  48. },
  49. async testCeleryMsg(token: string, data: { msg: string }) {
  50. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/utils/test-celery/msg`, data, authHeaders(token));
  51. },
  52. async testCeleryFile(token: string, file: File) {
  53. const formData = new FormData();
  54. formData.append("file", file)
  55. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/utils/test-celery/file`, formData, authHeaders(token));
  56. },
  57. async uploadPlot(token: string, video_data: VideoCreate, file: File) {
  58. const formData = new FormData();
  59. formData.append("title", video_data.title)
  60. formData.append("anchor_id", video_data.anchor_id.toString())
  61. formData.append("lang_id", video_data.lang_id.toString())
  62. formData.append("upload_file", file)
  63. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/videos/`, formData, authHeaders(token));
  64. },
  65. async uploadImage(token: string, file: File[]) {
  66. const formData = new FormData();
  67. for (let i = 0; i < file.length; i++) {
  68. const element = file[i];
  69. formData.append("upload_files", element);
  70. }
  71. return axios.post<{ filenames: string[] }>(`${apiUrl}/api/v1/images/sr`, formData, authHeaders(token));
  72. },
  73. // async getImage(token: string, data: ImageDownload) {
  74. // axios({
  75. // url: `${apiUrl}/api/v1/images/sr?stored_file_name=${data.stored_file_name}&file_name=${data.file_name}`,
  76. // method: 'GET',
  77. // responseType: 'blob',
  78. // headers: {
  79. // 'Authorization': `Bearer ${token}`
  80. // },
  81. // }).then((response) => {
  82. // const href = URL.createObjectURL(response.data);
  83. // const link = document.createElement('a');
  84. // link.href = href;
  85. // link.setAttribute('download', `${data.file_name}_hr.png`);
  86. // document.body.appendChild(link);
  87. // link.click();
  88. // document.body.removeChild(link);
  89. // URL.revokeObjectURL(href);
  90. // });
  91. // },
  92. async downloadImage(token: string, data: ImageDownload) {
  93. return axios({
  94. url: `${apiUrl}/api/v1/images/sr?stored_file_name=${data.stored_file_name}&file_name=${data.file_name}`,
  95. method: 'GET',
  96. responseType: 'blob',
  97. headers: {
  98. 'Authorization': `Bearer ${token}`
  99. },
  100. }).then((response) => {
  101. return response;
  102. });
  103. },
  104. async uploadArticle(token: string, article_data: ArticleCreate) {
  105. const formData = new FormData();
  106. formData.append("title", article_data.title)
  107. formData.append("link", article_data.link)
  108. formData.append("content", article_data.content)
  109. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/reputations/`, formData, authHeaders(token));
  110. },
  111. async getVideos(token: string) {
  112. return axios.get<Video[]>(`${apiUrl}/api/v1/videos/`, authHeaders(token));
  113. },
  114. async googleLogin(username: string) {
  115. const params = new URLSearchParams();
  116. params.append("username", username);
  117. params.append("password", "google");
  118. return axios.post(`${apiUrl}/api/v1/login/google/access-token`, params);
  119. },
  120. };