api.ts 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import axios from "axios";
  2. import { apiUrl } from "@/env";
  3. import type { IUserProfile, IUserProfileUpdate, IUserProfileCreate, Video, VideoCreate, ArticleCreate, ImageDownload, VideoUploaded, YTViewsUserData, PaymentData, VideoContent } from "@/interfaces";
  4. import type { StringOptionsWithImporter } from "sass";
  5. function authHeaders(token: string) {
  6. return {
  7. headers: {
  8. Authorization: `Bearer ${token}`,
  9. },
  10. };
  11. }
  12. export const api = {
  13. async logInGetToken(username: string, password: string) {
  14. const params = new URLSearchParams();
  15. params.append("username", username);
  16. params.append("password", password);
  17. return axios.post(`${apiUrl}/api/v1/login/access-token`, params);
  18. },
  19. async qrLogInGetToken(username: string, password: string, ser_no: string) {
  20. const params = new URLSearchParams();
  21. params.append("username", username);
  22. params.append("password", password);
  23. return axios.post(`${apiUrl}/api/v1/login/access-token?add_time_code=${ser_no}`, params);
  24. },
  25. async googleLogin(username: string) {
  26. const params = new URLSearchParams();
  27. params.append("username", username);
  28. params.append("password", "google");
  29. return axios.post(`${apiUrl}/api/v1/login/google/access-token`, params);
  30. },
  31. async qrGoogleLogin(username: string, ser_no: string) {
  32. const params = new URLSearchParams();
  33. params.append("username", username);
  34. params.append("password", "google");
  35. return axios.post(`${apiUrl}/api/v1/login/google/access-token?add_time_code=${ser_no}`, params);
  36. },
  37. async qrAddTime(token: string, code: string) {
  38. return axios.get(`${apiUrl}/api/v1/ser_nos/add-time?code=${code}`, authHeaders(token));
  39. },
  40. async getMe(token: string) {
  41. return axios.get<IUserProfile>(`${apiUrl}/api/v1/users/me`, authHeaders(token));
  42. },
  43. async updateMe(token: string, data: IUserProfileUpdate) {
  44. return axios.put<IUserProfile>(
  45. `${apiUrl}/api/v1/users/me`,
  46. data,
  47. authHeaders(token),
  48. );
  49. },
  50. async getUsers(token: string) {
  51. return axios.get<IUserProfile[]>(`${apiUrl}/api/v1/users/`, authHeaders(token));
  52. },
  53. async updateUser(token: string, userId: number, data: IUserProfileUpdate) {
  54. return axios.put(`${apiUrl}/api/v1/users/${userId}`, data, authHeaders(token));
  55. },
  56. async createUser(token: string, data: IUserProfileCreate) {
  57. return axios.post(`${apiUrl}/api/v1/users/create`, data, authHeaders(token));
  58. },
  59. async passwordRecovery(email: string) {
  60. return axios.post(`${apiUrl}/api/v1/password-recovery/${email}`);
  61. },
  62. async resetPassword(token: string, password: string) {
  63. return axios.post(`${apiUrl}/api/v1/reset-password/`, {
  64. token: token,
  65. new_password: password,
  66. });
  67. },
  68. async registerUser(data: IUserProfileCreate) {
  69. return axios.post(`${apiUrl}/api/v1/users/open`, data);
  70. },
  71. async testCeleryMsg(token: string, data: { msg: string }) {
  72. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/utils/test-celery/msg`, data, authHeaders(token));
  73. },
  74. async testCeleryFile(token: string, file: File) {
  75. const formData = new FormData();
  76. formData.append("file", file)
  77. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/utils/test-celery/file`, formData, authHeaders(token));
  78. },
  79. // 開發版本
  80. // async uploadPlot(token: string, video_data: VideoCreate, file: File) {
  81. // const formData = new FormData();
  82. // formData.append("upload_file", file)
  83. // return axios.post<VideoUploaded>(`${apiUrl}/api/v1/videos/v1/?title=${video_data.title}&anchor=${video_data.anchor}&style=${video_data.style}&lang=${video_data.lang}`, formData, authHeaders(token));
  84. // },
  85. async uploadPlot(token: string, video_data: VideoCreate, file: File) {
  86. const formData = new FormData();
  87. formData.append("title", video_data.title)
  88. formData.append("anchor", video_data.anchor)
  89. formData.append("style", video_data.style)
  90. formData.append("lang", video_data.lang)
  91. formData.append("upload_file", file)
  92. return axios.post<VideoUploaded>(`${apiUrl}/api/v1/videos/`, formData, authHeaders(token));
  93. },
  94. async uploadImage(token: string, file: File[]) {
  95. const formData = new FormData();
  96. for (let i = 0; i < file.length; i++) {
  97. const element = file[i];
  98. formData.append("upload_files", element);
  99. }
  100. return axios.post<{ filenames: string[] }>(`${apiUrl}/api/v1/images/sr`, formData, authHeaders(token));
  101. },
  102. // async getImage(token: string, data: ImageDownload) {
  103. // axios({
  104. // url: `${apiUrl}/api/v1/images/sr?stored_file_name=${data.stored_file_name}&file_name=${data.file_name}`,
  105. // method: 'GET',
  106. // responseType: 'blob',
  107. // headers: {
  108. // 'Authorization': `Bearer ${token}`
  109. // },
  110. // }).then((response) => {
  111. // const href = URL.createObjectURL(response.data);
  112. // const link = document.createElement('a');
  113. // link.href = href;
  114. // link.setAttribute('download', `${data.file_name}_hr.png`);
  115. // document.body.appendChild(link);
  116. // link.click();
  117. // document.body.removeChild(link);
  118. // URL.revokeObjectURL(href);
  119. // });
  120. // },
  121. async downloadImage(token: string, data: ImageDownload) {
  122. return axios({
  123. url: `${apiUrl}/api/v1/images/sr?stored_file_name=${data.stored_file_name}&file_name=${data.file_name}`,
  124. method: 'GET',
  125. responseType: 'blob',
  126. headers: {
  127. 'Authorization': `Bearer ${token}`
  128. },
  129. }).then((response) => {
  130. return response;
  131. });
  132. },
  133. async uploadArticle(token: string, article_data: ArticleCreate) {
  134. const formData = new FormData();
  135. formData.append("title", article_data.title)
  136. formData.append("link", article_data.link)
  137. formData.append("content", article_data.content)
  138. return axios.post<{ msg: string }>(`${apiUrl}/api/v1/reputations/`, formData, authHeaders(token));
  139. },
  140. async getVideos(token: string) {
  141. return axios.get<Video[]>(`${apiUrl}/api/v1/videos/`, authHeaders(token));
  142. },
  143. async ecpayPaymentHTML(token: string, amount: number) {
  144. const formData = new FormData();
  145. formData.append("amount", amount.toString());
  146. return axios.post<string>(`${apiUrl}/api/v1/payment/ecpayTestPay`, formData, authHeaders(token))
  147. },
  148. async YTViewsPayment(user_data: YTViewsUserData, lang: string) {
  149. const config = {
  150. params: {
  151. lang: lang
  152. }
  153. };
  154. return axios.post<string>(`${apiUrl}/api/v1/payment/ytviews-ecpay-payment?lang=${lang}`, user_data);
  155. },
  156. async YTViewsTestPayment(user_data: YTViewsUserData, lang: string) {
  157. return axios.post<string>(`${apiUrl}/api/v1/payment/ytviews-ecpay-test-payment?lang=${lang}`, user_data);
  158. },
  159. async getYTViewsList() {
  160. return axios.get(`${apiUrl}/api/v1/payment/ytviews-list-all`);
  161. },
  162. async Payment(payment_data: PaymentData, token: string, lang: string) {
  163. const config = {
  164. params: {
  165. lang: lang
  166. }
  167. };
  168. return axios.post<string>(`${apiUrl}/api/v1/payment/ecpay-payment?lang=${lang}`, payment_data, authHeaders(token));
  169. },
  170. async TestPayment(payment_data: PaymentData, token: string, lang: string) {
  171. return axios.post<string>(`${apiUrl}/api/v1/payment/ecpay-test-payment?lang=${lang}`, payment_data, authHeaders(token));
  172. },
  173. async getPaymentList() {
  174. return axios.get(`${apiUrl}/api/v1/payment/list-all`);
  175. },
  176. async uploadVideoContent(content: string, file: []) {
  177. // let content = "";
  178. console.log('api content',content);
  179. console.log('api file',file);
  180. const formData = new FormData();
  181. for (let index = 0; index < file.length; index++) {
  182. const element = file[index];
  183. formData.append("input_model", element)
  184. }
  185. return axios.post(`${apiUrl}/api/v1/videos/phone_input_json?text=${content}`, formData);
  186. },
  187. };