-
Notifications
You must be signed in to change notification settings - Fork 1
/
entity.party.ts
87 lines (76 loc) · 2.38 KB
/
entity.party.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
87
/**
* Party related methods
*
* [Abgeordnetenwatch API Documentation](https://www.abgeordnetenwatch.de/api/entitaeten/party)
*/
/** imports */
const axios = require('axios').default;
import { createRequestQuery } from '../create-request-query';
import {
EntityParty,
ResponseMeta,
ResponseEntityMeta,
PagerParameters,
RangeParameters,
SortParameters,
FilterParameters,
OperatorFilterParameters
} from '../types';
/**
* Service Endpoint
*
* [Abgeordnetenwatch API documentation](https://www.abgeordnetenwatch.de/api/entitaeten/party)
*/
export const url = 'https://www.abgeordnetenwatch.de/api/v2/parties'
/**
* List result
*/
export type PartyListResult = {
meta: ResponseMeta,
data: EntityParty[]
}
/**
* Single item result
*/
export type PartyResult = {
meta: ResponseEntityMeta,
data: EntityParty
}
/**
* Possible extra data that you can include on the response for a single item
*/
export type PartyRelatedDataParameter = 'show_information' | 'members';
/**
* Get a list of Parties
* ```typescript
* response = await partyList();
* ```
* @param params PagerParameters for Paging, RangeParameters for limiting the results or null
* @param sort Sort simply by a property or more complex by a list of properties
* @returns PartyListResult as JSON
*/
export const partyList = async (params?: PagerParameters|RangeParameters|null, sort?: SortParameters | null, filter?: FilterParameters | OperatorFilterParameters[]): Promise<PartyListResult> =>{
const query = createRequestQuery(params, sort, filter);
const requesturl = !!query ? `${url}?${query}` : url;
return axios.get(requesturl)
.then((response:any)=>response.data)
.then((response:any)=>response as PartyListResult)
};
/**
* Get a single Party
* ```typescript
* response = await party(5);
* ```
* @param id Id of the Party.
* @param relatedData Possible related Data you can include in the result
* @returns PartyResult as JSON
*/
export const party = async (id: number, relatedData:PartyRelatedDataParameter|null=null): Promise<PartyResult> =>{
let requestUrl = new URL(`${url}/${id}`);
if (!!relatedData) {
requestUrl.search = 'related_data=' + relatedData;
}
return axios.get(requestUrl.toString())
.then((response:any)=>response.data)
.then((response:any)=>response as PartyResult)
};