api.ts 5.4 KB

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