series-api.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. import { request } from '../../../utils';
  2. import { API } from '../../../types';
  3. import { ResponseType } from '../response-type';
  4. import { PostGetUsersWhoVisitedDataReturn } from '@api/regions';
  5. export interface PostGetSeries extends ResponseType {
  6. series: { id: number; name: string; icon: string }[];
  7. items: {
  8. id: number;
  9. series_id: number;
  10. name: string;
  11. region: number;
  12. pointJSON: any;
  13. polygonJSON: string;
  14. visited?: 0 | 1;
  15. }[];
  16. }
  17. export interface PostGetSeriesGroups extends ResponseType {
  18. data: {
  19. id: number;
  20. name: string;
  21. }[];
  22. }
  23. export interface PostGetSeriesList extends ResponseType {
  24. data: {
  25. id: number;
  26. name: string;
  27. icon: string;
  28. count: number;
  29. new: number;
  30. score: number;
  31. icon_png: string;
  32. count2: number;
  33. }[];
  34. }
  35. export interface PostGetItems extends ResponseType {
  36. groups: {
  37. name: string;
  38. icon: string;
  39. series_id: number;
  40. series_name: string;
  41. items: {
  42. item_id: number;
  43. icon: string | null;
  44. name: string;
  45. readonly: boolean;
  46. info: string;
  47. new: boolean;
  48. checked: boolean;
  49. checked_double: boolean;
  50. series_id: number;
  51. double: boolean;
  52. }[];
  53. }[];
  54. }
  55. export interface PostSetToggleItemReturn extends ResponseType {
  56. modified_items: number[];
  57. }
  58. export interface PostSetToggleItem {
  59. token: string;
  60. series_id: string;
  61. item_id: string;
  62. checked: 0 | 1;
  63. double: 0 | 1;
  64. }
  65. export interface GroupsData {
  66. name: string;
  67. id: number;
  68. series:
  69. | {
  70. id: number;
  71. name: string;
  72. }[]
  73. | null;
  74. }
  75. export interface PostGetSeriesGroupsRanking extends ResponseType {
  76. data: GroupsData[];
  77. }
  78. export interface RankingData {
  79. max_points: number;
  80. max_pages: number;
  81. ranking: {
  82. user_id: number;
  83. score: number;
  84. avatar: string | null;
  85. first_name: string;
  86. last_name: string;
  87. age: number;
  88. authenticated: 0 | 1;
  89. badge_nm: 0 | 1;
  90. badge_un: 0 | 1;
  91. badge_un_25: 0 | 1;
  92. badge_un_50: 0 | 1;
  93. badge_un_75: 0 | 1;
  94. badge_un_100: 0 | 1;
  95. badge_un_150: 0 | 1;
  96. badge_un_193: 0 | 1;
  97. badge_premium: 0 | 1;
  98. flag1: string;
  99. flag2: string | null;
  100. rip: boolean;
  101. recent_score_increase: boolean;
  102. }[];
  103. }
  104. export interface PostGetSeriesRanking extends ResponseType {
  105. data: RankingData;
  106. }
  107. export interface PostGetDataFromPoint extends ResponseType {
  108. nm: { id: number };
  109. dare: { id: number };
  110. country: string;
  111. }
  112. export interface PostGetSuggestionData extends ResponseType {
  113. nm: {
  114. id: number;
  115. region_name: string;
  116. }[];
  117. dare: {
  118. id: number;
  119. name: string;
  120. }[];
  121. series: {
  122. id: number;
  123. name: string;
  124. }[];
  125. grouped: {
  126. [key: string]: { id: number; name: string; group_name: string | null }[];
  127. };
  128. }
  129. export interface SubmitSuggestionReturn extends ResponseType {}
  130. export type SubmitSuggestionTypes = {
  131. token: string;
  132. comment: string;
  133. nm: number;
  134. dare: number;
  135. series: number;
  136. name: string;
  137. link: string;
  138. lat: number;
  139. lng: number;
  140. item: number;
  141. };
  142. export interface PostGetSeriesIcons extends ResponseType {
  143. data: {
  144. id: number;
  145. new_icon_png: string;
  146. new_icon_visited_png: string;
  147. }[];
  148. }
  149. export const seriesApi = {
  150. getSeries: (token: string | null, regions: string) =>
  151. request.postForm<PostGetSeries>(API.SERIES, { token, regions }),
  152. getSeriesGroups: () => request.postForm<PostGetSeriesGroups>(API.SERIES_GROUPS),
  153. getSeriesWithGroup: (token: string, group: string) =>
  154. request.postForm<PostGetSeriesList>(API.SERIES_WITH_GROUP, { token, group }),
  155. getItemsForSeries: (token: string, series_id: string) =>
  156. request.postForm<PostGetItems>(API.GET_ITEMS_FOR_SERIES, { token, series_id }),
  157. setToggleItem: (
  158. token: string,
  159. series_id: number,
  160. item_id: number,
  161. checked: 0 | 1,
  162. double: 0 | 1
  163. ) =>
  164. request.postForm<PostSetToggleItemReturn>(API.TOGGLE_ITEM_SERIES, {
  165. token,
  166. series_id,
  167. item_id,
  168. checked,
  169. double
  170. }),
  171. getSeriesGroupsRanking: () =>
  172. request.postForm<PostGetSeriesGroupsRanking>(API.GET_SERIES_GROUPS_RANKING),
  173. getSeriesRanking: (id: number, page: number, page_size: number) =>
  174. request.postForm<PostGetSeriesRanking>(API.GET_SERIES_RANKING, {
  175. id,
  176. page,
  177. page_size
  178. }),
  179. getDataFromPoint: (token: string, lat: number, lng: number) =>
  180. request.postForm<PostGetDataFromPoint>(API.GET_DATA_FROM_POINT, { token, lat, lng }),
  181. getSuggestionData: () => request.postForm<PostGetSuggestionData>(API.GET_SUGGESTION_DATA),
  182. submitSuggestion: (data: SubmitSuggestionTypes) =>
  183. request.postForm<SubmitSuggestionReturn>(API.SUBMIT_SUGGESTION, data),
  184. getList: () => request.postForm<PostGetSeriesList>(API.GET_SERIES_LIST),
  185. getIcons: () => request.postForm<PostGetSeriesIcons>(API.GET_ICONS),
  186. getUsersWhoTickedSeries: (
  187. id: number,
  188. page: number,
  189. sort?: string,
  190. age?: number,
  191. country?: string
  192. ) =>
  193. request.postForm<PostGetUsersWhoVisitedDataReturn>(API.GET_USERS_WHO_TICKED_SERIES, {
  194. id,
  195. page,
  196. sort,
  197. age,
  198. country
  199. })
  200. };