series-api.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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. flag1: string;
  97. flag2: string | null;
  98. rip: boolean;
  99. recent_score_increase: boolean;
  100. }[];
  101. }
  102. export interface PostGetSeriesRanking extends ResponseType {
  103. data: RankingData;
  104. }
  105. export interface PostGetDataFromPoint extends ResponseType {
  106. nm: { id: number };
  107. dare: { id: number };
  108. country: string;
  109. }
  110. export interface PostGetSuggestionData extends ResponseType {
  111. nm: {
  112. id: number;
  113. region_name: string;
  114. }[];
  115. dare: {
  116. id: number;
  117. name: string;
  118. }[];
  119. series: {
  120. id: number;
  121. name: string;
  122. }[];
  123. grouped: {
  124. [key: string]: { id: number; name: string; group_name: string | null }[];
  125. };
  126. }
  127. export interface SubmitSuggestionReturn extends ResponseType {}
  128. export type SubmitSuggestionTypes = {
  129. token: string;
  130. comment: string;
  131. nm: number;
  132. dare: number;
  133. series: number;
  134. name: string;
  135. link: string;
  136. lat: number;
  137. lng: number;
  138. item: number;
  139. };
  140. export interface PostGetSeriesIcons extends ResponseType {
  141. data: {
  142. id: number;
  143. new_icon_png: string;
  144. new_icon_visited_png: string;
  145. }[];
  146. }
  147. export const seriesApi = {
  148. getSeries: (token: string | null, regions: string) =>
  149. request.postForm<PostGetSeries>(API.SERIES, { token, regions }),
  150. getSeriesGroups: () => request.postForm<PostGetSeriesGroups>(API.SERIES_GROUPS),
  151. getSeriesWithGroup: (token: string, group: string) =>
  152. request.postForm<PostGetSeriesList>(API.SERIES_WITH_GROUP, { token, group }),
  153. getItemsForSeries: (token: string, series_id: string) =>
  154. request.postForm<PostGetItems>(API.GET_ITEMS_FOR_SERIES, { token, series_id }),
  155. setToggleItem: (
  156. token: string,
  157. series_id: number,
  158. item_id: number,
  159. checked: 0 | 1,
  160. double: 0 | 1
  161. ) =>
  162. request.postForm<PostSetToggleItemReturn>(API.TOGGLE_ITEM_SERIES, {
  163. token,
  164. series_id,
  165. item_id,
  166. checked,
  167. double
  168. }),
  169. getSeriesGroupsRanking: () =>
  170. request.postForm<PostGetSeriesGroupsRanking>(API.GET_SERIES_GROUPS_RANKING),
  171. getSeriesRanking: (id: number, page: number, page_size: number) =>
  172. request.postForm<PostGetSeriesRanking>(API.GET_SERIES_RANKING, {
  173. id,
  174. page,
  175. page_size
  176. }),
  177. getDataFromPoint: (token: string, lat: number, lng: number) =>
  178. request.postForm<PostGetDataFromPoint>(API.GET_DATA_FROM_POINT, { token, lat, lng }),
  179. getSuggestionData: () => request.postForm<PostGetSuggestionData>(API.GET_SUGGESTION_DATA),
  180. submitSuggestion: (data: SubmitSuggestionTypes) =>
  181. request.postForm<SubmitSuggestionReturn>(API.SUBMIT_SUGGESTION, data),
  182. getList: () => request.postForm<PostGetSeriesList>(API.GET_SERIES_LIST),
  183. getIcons: () => request.postForm<PostGetSeriesIcons>(API.GET_ICONS)
  184. };