Skip to content

Commit 6969f0d

Browse files
czmjmanelcecs
authored andcommitted
Add emergencies to flowObjects response
1 parent 6e92a29 commit 6969f0d

File tree

5 files changed

+81
-0
lines changed

5 files changed

+81
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { Database } from '@unocha/hpc-api-core/src/db/type';
2+
import { InstanceDataOfModel } from '@unocha/hpc-api-core/src/db/util/raw-model';
3+
import { createBrandedValue } from '@unocha/hpc-api-core/src/util/types';
4+
import { Service } from 'typedi';
5+
6+
@Service()
7+
export class EmergencyService {
8+
async findById(
9+
models: Database,
10+
id: number
11+
): Promise<InstanceDataOfModel<Database['emergency']>> {
12+
const emergency = await models.emergency.get(createBrandedValue(id));
13+
14+
if (!emergency) {
15+
throw new Error(`Governing entity with ID ${id} does not exist`);
16+
}
17+
18+
return emergency;
19+
}
20+
21+
async findByIds(
22+
models: Database,
23+
ids: number[]
24+
): Promise<InstanceDataOfModel<Database['emergency']>[]> {
25+
return await models.emergency.find({
26+
where: {
27+
id: {
28+
[models.Op.IN]: ids.map((id) => createBrandedValue(id)),
29+
},
30+
},
31+
});
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Database } from '@unocha/hpc-api-core/src/db/type';
2+
import { InstanceDataOfModel } from '@unocha/hpc-api-core/src/db/util/raw-model';
3+
import { Arg, Ctx, Query, Resolver } from 'type-graphql';
4+
import { Service } from 'typedi';
5+
import Context from '../../Context';
6+
import { EmergencyService } from '../emergency-service';
7+
import Emergency from './types';
8+
9+
@Service()
10+
@Resolver(Emergency)
11+
export default class EmergencyResolver {
12+
constructor(private fieldClusterService: EmergencyService) {}
13+
14+
@Query(() => Emergency)
15+
async fieldCluster(
16+
@Arg('id') id: number,
17+
@Ctx() context: Context
18+
): Promise<InstanceDataOfModel<Database['emergency']>> {
19+
return await this.fieldClusterService.findById(context.models, id);
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Brand } from '@unocha/hpc-api-core/src/util/types';
2+
import { Field, ID, ObjectType } from 'type-graphql';
3+
import { BaseType } from '../../base-types';
4+
5+
@ObjectType()
6+
export default class Emergency extends BaseType {
7+
@Field(() => ID)
8+
id: Brand<number, { readonly s: unique symbol }, 'Emergency ID'>;
9+
10+
@Field({ nullable: true })
11+
name?: string;
12+
}

src/domain-services/flow-object/flow-object-service.ts

+11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { createBrandedValue } from '@unocha/hpc-api-core/src/util/types';
44
import { groupBy } from 'lodash';
55
import { Service } from 'typedi';
66
import Context from '../Context';
7+
import { EmergencyService } from '../emergency/emergency-service';
78
import { GlobalClusterService } from '../global-cluster/global-cluster-service';
89
import { GoverningEntityService } from '../governing-entity/governing-entity-service';
910
import { LocationService } from '../location/location-service';
@@ -15,6 +16,7 @@ import { UsageYearService } from '../usage-year/usage-year-service';
1516
@Service()
1617
export class FlowObjectService {
1718
constructor(
19+
private emergencyService: EmergencyService,
1820
private globalClusterService: GlobalClusterService,
1921
private governingEntityService: GoverningEntityService,
2022
private locationService: LocationService,
@@ -42,6 +44,15 @@ export class FlowObjectService {
4244
const typedObjects = await Promise.all(
4345
Object.entries(groupBy(flowObjects, 'objectType')).map(
4446
async ([type, flowObjects]) => {
47+
if (type === 'emergency') {
48+
return [
49+
'emergencies',
50+
await this.emergencyService.findByIds(
51+
context.models,
52+
flowObjects.map((fo) => fo.objectID)
53+
),
54+
];
55+
}
4556
if (type === 'globalCluster') {
4657
return [
4758
'globalClusters',

src/domain-services/flow/graphql/types.ts

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Brand } from '@unocha/hpc-api-core/src/util/types';
22
import { Field, ID, ObjectType } from 'type-graphql';
33
import { BaseTypeWithSoftDelete } from '../../base-types';
4+
import Emergency from '../../emergency/graphql/types';
45
import GlobalCluster from '../../global-cluster/graphql/types';
56
import GoverningEntity from '../../governing-entity/graphql/types';
67
import Location from '../../location/graphql/types';
@@ -11,6 +12,9 @@ import UsageYear from '../../usage-year/graphql/types';
1112

1213
@ObjectType()
1314
export class FlowObjectsGroupedByType {
15+
@Field(() => [Emergency], { nullable: true })
16+
emergencies: Emergency[];
17+
1418
@Field(() => [GlobalCluster], { nullable: true })
1519
globalClusters: GlobalCluster[];
1620

0 commit comments

Comments
 (0)