-
Notifications
You must be signed in to change notification settings - Fork 4
/
NationQuery.ts
86 lines (79 loc) · 2.14 KB
/
NationQuery.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import {Kit} from '../..';
import {
Nation,
NationPaginator,
QueryNationsArgs,
QueryNationsOrderByOrderByClause,
} from '../../interfaces/PoliticsAndWarGraphQL';
import GraphQL from '../../services/GraphQL';
export enum AlliancePosition {
Noalliance = 0,
Applicant = 1,
Member = 2,
Officer = 3,
Heir = 4,
Leader = 5,
}
export interface Parameters {
first: number;
id?: number[];
name?: string;
nation_name?: string[];
leader_name?: string[];
alliance_id?: number[];
alliance_position?: AlliancePosition;
color?: string;
created_after?: string;
min_score?: number;
max_score?: number;
cities?: number;
min_cities?: number;
max_cities?: number;
vmode?: boolean;
page?: number;
orderBy?: QueryNationsOrderByOrderByClause;
}
/**
* Gets a list of nations
* @param {Parameters} params Query parameters to customize your results
* @param {string} query The graphql query to get info with
* @param {boolean?} paginator Deliver the data in a paginated format
* @returns {Promise<Nation[] | NationPaginator>} The nations queried or as paginated
*/
export default async function nationQuery(this: Kit, params: Parameters, query: string, paginator?: false): Promise<Nation[]>;
export default async function nationQuery(this: Kit, params: Parameters, query: string, paginator: true): Promise<NationPaginator>;
export default async function nationQuery(
this: Kit,
params: Parameters,
query: string,
paginator?: boolean,
): Promise<NationPaginator | Nation[]> {
const argsToParameters = GraphQL.generateParameters(params as QueryNationsArgs);
const res = await GraphQL.makeCall(`
{
nations${argsToParameters} {
${
(paginator) ?
`
paginatorInfo {
count,
currentPage,
firstItem,
hasMorePages,
lastItem,
lastPage,
perPage,
total
},
`:''
}
data {
${query}
}
}
}
`, this.apiKey);
this.setRateLimit(res.rateLimit);
if (paginator) return res.data.nations as NationPaginator;
return res.data.nations.data as Nation[];
}