Skip to content

Commit 37dd03f

Browse files
busticatedsuda
authored andcommitted
add location service endpoint
1 parent 4163074 commit 37dd03f

File tree

2 files changed

+108
-1
lines changed

2 files changed

+108
-1
lines changed

src/Particle.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,6 +1963,71 @@ class Particle {
19631963
});
19641964
}
19651965

1966+
/**
1967+
* Query location for devices within a product
1968+
* @param {Object} options Options for this API call
1969+
* @param {String} options.product Locations for this product ID or slug
1970+
* @param {String} options.auth Access Token
1971+
* @param {String} options.dateRange Start and end date in ISO8601 format, separated by comma, to query
1972+
* @param {String} options.rectBl Bottom left of the rectangular bounding box to query. Latitude and longitude separated by comma
1973+
* @param {String} options.rectTr Top right of the rectangular bounding box to query. Latitude and longitude separated by comma
1974+
* @param {String} options.deviceId Device ID prefix to include in the query
1975+
* @param {String} options.deviceName Device name prefix to include in the query
1976+
* @param {String} options.groups Array of group names to include in the query
1977+
* @param {String} options.page Page of results to display. Defaults to 1
1978+
* @param {String} options.perPage Number of results per page. Defaults to 20. Maximum of 100
1979+
* @param {Object} [options.headers] Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.
1980+
* @param {Object} [options.context] Request context
1981+
* @returns {Promise} A promise
1982+
*/
1983+
getProductLocations({ auth, product, dateRange, rectBl, rectTr, deviceId, deviceName, groups, page, perPage, headers, context }){
1984+
return this.get({
1985+
uri: `/v1/products/${product}/locations`,
1986+
query: {
1987+
date_range: dateRange,
1988+
rect_bl: rectBl,
1989+
rect_tr: rectTr,
1990+
device_id: deviceId,
1991+
device_name: deviceName,
1992+
groups,
1993+
page,
1994+
per_page: perPage
1995+
},
1996+
auth,
1997+
headers,
1998+
context
1999+
});
2000+
}
2001+
2002+
/**
2003+
* Query location for one device within a product
2004+
* @param {Object} options Options for this API call
2005+
* @param {String} options.product Locations for this product ID or slug
2006+
* @param {String} options.auth Access Token
2007+
* @param {String} options.dateRange Start and end date in ISO8601 format, separated by comma, to query
2008+
* @param {String} options.rectBl Bottom left of the rectangular bounding box to query. Latitude and longitude separated by comma
2009+
* @param {String} options.rectTr Top right of the rectangular bounding box to query. Latitude and longitude separated by comma
2010+
* @param {String} options.deviceId Device ID to query
2011+
* @param {Object} [options.headers] Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.
2012+
* @param {Object} [options.context] Request context
2013+
* @param {Object} [options.headers] Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.
2014+
* @param {Object} [options.context] Request context
2015+
* @returns {Promise} A promise
2016+
*/
2017+
getProductDeviceLocations({ auth, product, dateRange, rectBl, rectTr, deviceId, headers, context }){
2018+
return this.get({
2019+
uri: `/v1/products/${product}/locations/${deviceId}`,
2020+
query: {
2021+
date_range: dateRange,
2022+
rect_bl: rectBl,
2023+
rect_tr: rectTr
2024+
},
2025+
auth,
2026+
headers,
2027+
context
2028+
});
2029+
}
2030+
19662031
/**
19672032
* API URI to access a device
19682033
* @param {Object} options Options for this API call

test/Particle.spec.js

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ const props = {
9292
otp: '123456',
9393
mfaToken: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
9494
networkId: '65535',
95-
groups: ['foo', 'bar']
95+
groups: ['foo', 'bar'],
96+
dateRange: '2020-05-15T18:29:45.000Z,2020-05-19T18:29:45.000Z',
97+
rectBl: '56.185412,-4.049868',
98+
rectTr: '56.571537,-5.385920'
9699
};
97100

98101
const product = 'ze-product-v1';
@@ -2374,6 +2377,45 @@ describe('ParticleAPI', () => {
23742377
});
23752378
});
23762379

2380+
describe('.getProductLocations', () => {
2381+
it('generates request', () => {
2382+
return api.getProductLocations(propsWithProduct).then((results) => {
2383+
results.should.match({
2384+
method: 'get',
2385+
uri: `/v1/products/${product}/locations`,
2386+
auth: props.auth,
2387+
query: {
2388+
date_range: props.dateRange,
2389+
rect_bl: props.rectBl,
2390+
rect_tr: props.rectTr,
2391+
device_id: props.deviceId,
2392+
device_name: props.deviceName,
2393+
groups: props.groups,
2394+
page: props.page,
2395+
per_page: props.perPage
2396+
}
2397+
});
2398+
});
2399+
});
2400+
});
2401+
2402+
describe('.getProductDeviceLocations', () => {
2403+
it('generates request', () => {
2404+
return api.getProductDeviceLocations(propsWithProduct).then((results) => {
2405+
results.should.match({
2406+
method: 'get',
2407+
uri: `/v1/products/${product}/locations/${props.deviceId}`,
2408+
auth: props.auth,
2409+
query: {
2410+
date_range: props.dateRange,
2411+
rect_bl: props.rectBl,
2412+
rect_tr: props.rectTr
2413+
}
2414+
});
2415+
});
2416+
});
2417+
});
2418+
23772419
describe('.deleteUser', () => {
23782420
it('sends request to delete the current user', () => {
23792421
return api.deleteUser(props).then(result => {

0 commit comments

Comments
 (0)