series-api.tsx 4.7 KB

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