Skip to content

Commit 660df56

Browse files
committed
Add stats to BaseService
Implement for OrganisationMembersService
1 parent 75d694a commit 660df56

15 files changed

+147
-35
lines changed

dist/index.js

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class EquipmentExposure extends BaseModel {
250250
];
251251
constructor(data) {
252252
super(data);
253-
this.start_time = data?.attributes?.start_time?.id ?? data?.start_time ?? "";
253+
this.start_time = data?.attributes?.start_time ?? data?.start_time ?? "";
254254
this.end_time = data?.attributes?.end_time ?? data?.end_time ?? "";
255255
if (data?.attributes?.location) {
256256
const locationData = data.attributes.location;
@@ -266,20 +266,11 @@ class EquipmentExposure extends BaseModel {
266266
coordinates: locationData.coordinates ?? []
267267
};
268268
}
269-
if (data?.attributes?.ppe) {
270-
const ppeData = data.attributes?.ppe;
271-
this.ppe = {
272-
mask: ppeData.ppe?.mask ?? false,
273-
ear_defenders: ppeData.ppe?.ear_defenders ?? false
274-
};
275-
}
276-
if (data?.ppe) {
277-
const ppeData = data.ppe;
278-
this.ppe = {
279-
mask: ppeData.mask ?? false,
280-
ear_defenders: ppeData.ear_defenders ?? false
281-
};
282-
}
269+
const ppe = data?.ppe ?? data?.attributes?.ppe;
270+
this.ppe = {
271+
mask: ppe?.mask ?? false,
272+
ear_defenders: ppe?.ear_defenders ?? false
273+
};
283274
}
284275
}
285276

@@ -1274,6 +1265,22 @@ class SchemeTemplate extends BaseModel {
12741265
}
12751266
}
12761267

1268+
// src/models/OrganisationMemberStats.ts
1269+
class OrganisationMemberStats extends BaseModel {
1270+
type = "members-stats";
1271+
members = {
1272+
users: 0,
1273+
service_accounts: 0
1274+
};
1275+
constructor(data) {
1276+
super(data);
1277+
this.members = data?.attributes?.members || {
1278+
users: 0,
1279+
members: 0
1280+
};
1281+
}
1282+
}
1283+
12771284
// src/utils/Hydrator.ts
12781285
class Hydrator {
12791286
modelMap = {
@@ -1292,6 +1299,7 @@ class Hydrator {
12921299
groups: Group,
12931300
"operation-templates": OperationTemplate,
12941301
operations: Operation,
1302+
"members-stats": OrganisationMemberStats,
12951303
permissions: Permission,
12961304
properties: Property,
12971305
roles: Role,
@@ -1572,6 +1580,15 @@ class BaseService extends RequestBuilder {
15721580
const payload = jsonApiSerializer.buildUpdatePayload(model);
15731581
return await this.client.makePatchRequest(`${this.endpoint}/${id}`, payload);
15741582
}
1583+
async stats(options) {
1584+
const statsEndpoint = `${this.endpoint}/stats`;
1585+
const { requestOptions } = this.buildRequestParams("", options);
1586+
const resp = await this.client.makeGetRequest(statsEndpoint, requestOptions);
1587+
if (resp.data && typeof resp.data === "object") {
1588+
resp.data = this.hydrator.hydrateResponse(resp.data, resp.included || []);
1589+
}
1590+
return resp;
1591+
}
15751592
}
15761593

15771594
// src/services/FormCategoriesService.ts
@@ -1982,6 +1999,9 @@ class OrganisationMembersService extends BaseService {
19821999
constructor(client) {
19832000
super(client, "/v3/orgs/:orgId/iam/members");
19842001
}
2002+
stats(options) {
2003+
return super.stats(options);
2004+
}
19852005
}
19862006

19872007
// src/services/SchemeTemplatesService.ts

dist/models/EquipmentExposure.js

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export class EquipmentExposure extends BaseModel {
3434
];
3535
constructor(data) {
3636
super(data);
37-
this.start_time = data?.attributes?.start_time?.id ?? data?.start_time ?? '';
37+
this.start_time = data?.attributes?.start_time ?? data?.start_time ?? '';
3838
this.end_time = data?.attributes?.end_time ?? data?.end_time ?? '';
3939
if (data?.attributes?.location) {
4040
const locationData = data.attributes.location;
@@ -50,19 +50,10 @@ export class EquipmentExposure extends BaseModel {
5050
coordinates: locationData.coordinates ?? []
5151
};
5252
}
53-
if (data?.attributes?.ppe) {
54-
const ppeData = data.attributes?.ppe;
55-
this.ppe = {
56-
mask: ppeData.ppe?.mask ?? false,
57-
ear_defenders: ppeData.ppe?.ear_defenders ?? false
58-
};
59-
}
60-
if (data?.ppe) {
61-
const ppeData = data.ppe;
62-
this.ppe = {
63-
mask: ppeData.mask ?? false,
64-
ear_defenders: ppeData.ear_defenders ?? false
65-
};
66-
}
53+
const ppe = data?.ppe ?? data?.attributes?.ppe;
54+
this.ppe = {
55+
mask: ppe?.mask ?? false,
56+
ear_defenders: ppe?.ear_defenders ?? false
57+
};
6758
}
6859
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { BaseModel } from './BaseModel';
2+
type MembersStats = {
3+
users: number;
4+
service_accounts: number;
5+
};
6+
export declare class OrganisationMemberStats extends BaseModel {
7+
type: string;
8+
members: MembersStats;
9+
constructor(data?: any);
10+
}
11+
export {};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { BaseModel } from './BaseModel';
2+
export class OrganisationMemberStats extends BaseModel {
3+
type = 'members-stats';
4+
members = {
5+
users: 0,
6+
service_accounts: 0
7+
};
8+
constructor(data) {
9+
super(data);
10+
this.members = data?.attributes?.members || {
11+
users: 0,
12+
members: 0
13+
};
14+
}
15+
}

dist/services/BaseService.d.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ export declare class BaseService<T extends Model> extends RequestBuilder {
1313
constructor(client: Client, endpoint: string);
1414
convertToJsonApi(model: Model): {
1515
data: {
16-
id?: string | undefined;
16+
id?: string;
1717
type: string;
1818
attributes: Record<string, any>;
1919
relationships?: Record<string, {
2020
data: {
2121
type: string;
2222
id: string;
2323
};
24-
}> | undefined;
24+
}>;
2525
};
2626
};
2727
get(): Promise<InternalResponse<T[]>>;
@@ -30,4 +30,5 @@ export declare class BaseService<T extends Model> extends RequestBuilder {
3030
get(param: RequestOptionsType): Promise<InternalResponse<T[]>>;
3131
create(model: T, params?: unknown): Promise<InternalResponse<T>>;
3232
update(id: string, model: Model, params?: unknown): Promise<InternalResponse<T>>;
33+
stats<R = any>(options?: RequestOptionsType): Promise<InternalResponse<R>>;
3334
}

dist/services/BaseService.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,13 @@ export class BaseService extends RequestBuilder {
4040
const payload = jsonApiSerializer.buildUpdatePayload(model);
4141
return await this.client.makePatchRequest(`${this.endpoint}/${id}`, payload);
4242
}
43+
async stats(options) {
44+
const statsEndpoint = `${this.endpoint}/stats`;
45+
const { requestOptions } = this.buildRequestParams('', options);
46+
const resp = await this.client.makeGetRequest(statsEndpoint, requestOptions);
47+
if (resp.data && typeof resp.data === 'object') {
48+
resp.data = this.hydrator.hydrateResponse(resp.data, resp.included || []);
49+
}
50+
return resp;
51+
}
4352
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
import { BaseService } from '../services/BaseService';
22
import { Client } from '../Client';
33
import type { User } from '../models/User';
4+
import type { InternalResponse } from '../types/Response';
5+
import type { RequestOptionsType } from '../utils/RequestOptions';
6+
type OrganisationMembersStats = {
7+
members: {
8+
users: number;
9+
service_accounts: number;
10+
};
11+
};
412
export declare class OrganisationMembersService extends BaseService<User> {
513
constructor(client: Client);
14+
stats<R = OrganisationMembersStats>(options?: RequestOptionsType): Promise<InternalResponse<R>>;
615
}
16+
export {};

dist/services/OrganisationMembersService.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@ export class OrganisationMembersService extends BaseService {
44
constructor(client) {
55
super(client, "/v3/orgs/:orgId/iam/members");
66
}
7+
stats(options) {
8+
return super.stats(options);
9+
}
710
}

dist/utils/Hydrator.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { Street } from '../models/Street';
3434
import { Appointment } from '../models/Appointment';
3535
import { WorkOrderTemplate } from '../models/WorkOrderTemplate';
3636
import { SchemeTemplate } from '../models/SchemeTemplate';
37+
import { OrganisationMemberStats } from '../models/OrganisationMemberStats';
3738
export class Hydrator {
3839
modelMap = {
3940
appointments: Appointment,
@@ -51,6 +52,7 @@ export class Hydrator {
5152
groups: Group,
5253
"operation-templates": OperationTemplate,
5354
operations: Operation,
55+
"members-stats": OrganisationMemberStats,
5456
permissions: Permission,
5557
properties: Property,
5658
roles: Role,

dist/utils/Requests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class Requests {
1212
}
1313
static buildInternalResponse(fetchResponse, json) {
1414
return {
15-
ok: fetchResponse.ok,
15+
ok: fetchResponse.ok, // @todo convert to own version
1616
statusCode: fetchResponse.status,
1717
headers: fetchResponse.headers,
1818
meta: json?.meta || null,
@@ -29,7 +29,7 @@ export class Requests {
2929
static buildInternalErrorResponse(error) {
3030
return {
3131
ok: false,
32-
statusCode: error.statusCode || 0,
32+
statusCode: error.statusCode || 0, // If there's no response, status code is 0
3333
headers: error.headers,
3434
data: null,
3535
errors: {

0 commit comments

Comments
 (0)