user-api.tsx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. import { request } from '../../../utils';
  2. import { API } from '../../../types';
  3. import { ResponseType } from '../response-type';
  4. import { User } from '@api/regions';
  5. export interface PostGetProfileData extends ResponseType {
  6. user_id: number;
  7. email: string;
  8. first_name: string;
  9. last_name: string;
  10. username: string;
  11. avatar: string;
  12. date_of_birth: string;
  13. homebase: number;
  14. homebase2: number | null;
  15. bio: string;
  16. links: {
  17. f?: SocialData;
  18. t?: SocialData;
  19. i?: SocialData;
  20. y?: SocialData;
  21. www?: SocialData;
  22. other?: SocialData;
  23. };
  24. }
  25. export interface PostSetProfileData {
  26. token: string;
  27. user?: {
  28. email?: string;
  29. first_name?: string;
  30. last_name?: string;
  31. date_of_birth?: string;
  32. username?: string;
  33. homebase?: number;
  34. homebase2?: number;
  35. bio?: string;
  36. f?: string;
  37. t?: string;
  38. i?: string;
  39. y?: string;
  40. www?: string;
  41. other?: string;
  42. };
  43. photo?: {
  44. type: string;
  45. uri: string;
  46. name: string;
  47. };
  48. }
  49. export interface PostSetProfileDataReturn extends ResponseType {
  50. updated: string[];
  51. not_updated: string[];
  52. }
  53. export type SocialData = {
  54. link: string;
  55. active: 0 | 1;
  56. };
  57. export interface PostGetProfileInfoReturn extends ResponseType {
  58. username: string;
  59. email: string;
  60. first_name: string;
  61. last_name: string;
  62. date_of_birth: string;
  63. avatar_full_size: string;
  64. avatar: string;
  65. bio: string;
  66. links: {
  67. f?: SocialData;
  68. t?: SocialData;
  69. i?: SocialData;
  70. y?: SocialData;
  71. www?: SocialData;
  72. other?: SocialData;
  73. };
  74. homebase: number;
  75. homebase_name: string;
  76. homebase_flag: string;
  77. homebase2: number;
  78. homebase2_name: string;
  79. homebase2_flag: string;
  80. series: Series[];
  81. scores: Score[];
  82. }
  83. export type Series = {
  84. id: number;
  85. score: string;
  86. name: string;
  87. icon: string;
  88. app_icon: string;
  89. };
  90. export type Score = {
  91. name: string;
  92. score: number;
  93. };
  94. export interface PostGetProfileRegionsReturn extends ResponseType {
  95. data: NM | MQP | UN_UNP_TCC | YES | SLOW | WHS;
  96. }
  97. export type NM = {
  98. all_count: number;
  99. firsts: Record<string, number | null>;
  100. last: Record<string, number | null>;
  101. megaregions: {
  102. id: number;
  103. name: string;
  104. regions: {
  105. id: number;
  106. name: string;
  107. flag1: string;
  108. flag2: string | null;
  109. }[];
  110. transits: number[];
  111. visits: number[];
  112. }[];
  113. transits_count: number;
  114. visits_count: number;
  115. };
  116. export type MQP = {
  117. all_count: number;
  118. megaregions: {
  119. id: number;
  120. name: string;
  121. regions: {
  122. id: number;
  123. name: string;
  124. flag1: string;
  125. flag2: string | null;
  126. }[];
  127. transits: number[];
  128. visits: number[];
  129. }[];
  130. transits_count: number;
  131. visits_count: number;
  132. };
  133. export type UN_UNP_TCC = [
  134. {
  135. name: string;
  136. name_en: string;
  137. flag1: string;
  138. flag2: string | null;
  139. }[],
  140. string[],
  141. number,
  142. number
  143. ];
  144. export type YES = [
  145. {
  146. id: number;
  147. name: string;
  148. name_en: string;
  149. flag1: string;
  150. flag2: string | null;
  151. }[],
  152. Record<
  153. string,
  154. {
  155. year: number;
  156. score: number;
  157. country: string;
  158. }
  159. >
  160. ];
  161. export type SLOW = [
  162. {
  163. country_id: number;
  164. country: string;
  165. flag: string;
  166. mega: number[];
  167. visited: 0 | 1;
  168. slow11: 0 | 1;
  169. slow31: 0 | 1;
  170. slow101: 0 | 1;
  171. yes: number;
  172. }[],
  173. Record<string, string>
  174. ];
  175. export type WHS = {
  176. name: string;
  177. flag: string;
  178. visited: boolean;
  179. }[];
  180. export interface PostGetProfileDataReturn extends ResponseType {
  181. data: {
  182. can_authenticate: 0 | 1;
  183. can_see_updates: 0 | 1;
  184. can_send_friend_request: 0 | 1;
  185. friend_request_received: 0 | 1;
  186. friend_request_sent: 0 | 1;
  187. friend_db_id: number;
  188. friends: {
  189. avatar: string | null;
  190. user_id: number;
  191. first_name: string;
  192. last_name: string;
  193. flag: string;
  194. }[];
  195. interviews: {
  196. link: string;
  197. year: number;
  198. }[];
  199. is_friend: 0 | 1;
  200. own_profile: 0 | 1;
  201. png_map: 0 | 1;
  202. scores: {
  203. rank_country: number;
  204. rank_nm: number;
  205. rank_tbt: number;
  206. score_kye: number;
  207. score_mqp: number;
  208. score_mtp: number;
  209. score_nm: number;
  210. score_slow: string;
  211. score_slow11: string;
  212. score_slow31: string;
  213. score_slow101: string;
  214. score_tbt: number;
  215. score_tcc: number;
  216. score_un: number;
  217. score_unp: number;
  218. score_whs: number;
  219. score_yes: number;
  220. series: string;
  221. series_max: string;
  222. series_total: string;
  223. };
  224. series: Series[];
  225. user_data: {
  226. age: number;
  227. alive: 0 | 1;
  228. auth: 0 | 1;
  229. avatar: string | null;
  230. badge_nm: number | null;
  231. badge_tbt: 0 | 1;
  232. badge_un: 0 | 1;
  233. badges: number;
  234. bio: string;
  235. email: string;
  236. first_name: string;
  237. flag1: string;
  238. flag2: string | null;
  239. last_name: string;
  240. last_seen_date: string | null;
  241. last_seen_in: string | null;
  242. links_json: string;
  243. offline: number | null;
  244. patreon: 0 | 1;
  245. supreme: 0 | 1;
  246. ukr: 0 | 1;
  247. homeregion: string;
  248. };
  249. };
  250. }
  251. export interface PostGetProfileUpdatesReturn extends ResponseType {
  252. data: {
  253. can_see_updates: 0 | 1;
  254. friends_total: number;
  255. updates: {
  256. countries: number;
  257. dare: number;
  258. friends: number;
  259. new_nm: number;
  260. photos: number;
  261. series: number;
  262. visited_regions: number;
  263. whs: number;
  264. };
  265. };
  266. }
  267. export interface PostGetMapYearsReturn extends ResponseType {
  268. data: {
  269. map_years: number[];
  270. map_count_nm: { [key: string]: number };
  271. map_count_un: { [key: string]: number };
  272. map_count_in_nm: { [key: string]: number };
  273. map_count_in_un: { [key: string]: number };
  274. max_nm: number;
  275. max_un: number;
  276. };
  277. }
  278. export const userApi = {
  279. getProfileData: (token: string) =>
  280. request.postForm<PostGetProfileData>(API.GET_USER_SETTINGS_DATA, { token }),
  281. setProfileData: (data: PostSetProfileData) => {
  282. const formData = new FormData();
  283. formData.append('token', data.token);
  284. formData.append('user', JSON.stringify(data.user));
  285. formData.append('photo', {
  286. ...data.photo
  287. } as unknown as Blob);
  288. return request.postForm<PostSetProfileDataReturn>(API.SET_USER_SETTINGS_DATA, formData);
  289. },
  290. getProfileInfo: (token: string) =>
  291. request.postForm<PostGetProfileInfoReturn>(API.PROFILE_INFO, { token }),
  292. getProfileInfoPublic: (uid: number) =>
  293. request.postForm<Exclude<PostGetProfileInfoReturn, { email: null }>>(API.PROFILE_INFO_PUBLIC, {
  294. uid
  295. }),
  296. getProfileRegions: (uid: number, type: string) =>
  297. request.postForm<PostGetProfileRegionsReturn>(API.GET_PROFILE_REGIONS, { uid, type }),
  298. getProfileInfoData: (token: string, profile_id: number) =>
  299. request.postForm<PostGetProfileDataReturn>(API.GET_PROGILE_DATA, {
  300. token,
  301. profile_id
  302. }),
  303. getProfileUpdates: (token: string, profile_id: number) =>
  304. request.postForm<PostGetProfileUpdatesReturn>(API.GET_PROFILE_UPDATES, {
  305. token,
  306. profile_id
  307. }),
  308. getMapYears: (profile_id: number) =>
  309. request.postForm<PostGetMapYearsReturn>(API.GET_MAP_YEARS, { profile_id })
  310. };