Skip to content

Commit a77ba57

Browse files
Added explicit delete of data-targets when deleting an application
1 parent cd76f6e commit a77ba57

File tree

4 files changed

+30
-12
lines changed

4 files changed

+30
-12
lines changed

src/modules/device-management/application.module.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
import { Module, forwardRef } from "@nestjs/common";
2-
1+
import { forwardRef, Module } from "@nestjs/common";
32
import { ApplicationController } from "@admin-controller/application.controller";
43
import { SharedModule } from "@modules/shared.module";
54
import { OrganizationModule } from "@modules/user-management/organization.module";
65
import { ApplicationService } from "@services/device-management/application.service";
76
import { ChirpstackAdministrationModule } from "@modules/device-integrations/chirpstack-administration.module";
87
import { PermissionModule } from "@modules/user-management/permission.module";
98
import { MulticastModule } from "./multicast.module";
9+
import { DataTargetModule } from "@modules/device-management/data-target.module";
1010

1111
@Module({
1212
imports: [
1313
SharedModule,
1414
forwardRef(() => OrganizationModule),
1515
forwardRef(() => PermissionModule),
1616
forwardRef(() => MulticastModule), // because of circular reference
17+
forwardRef(() => DataTargetModule),
1718
ChirpstackAdministrationModule,
1819
],
1920
exports: [ApplicationService],

src/modules/device-management/data-target.module.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import configuration from "@config/configuration";
33
import { ApplicationModule } from "@modules/device-management/application.module";
44
import { SharedModule } from "@modules/shared.module";
55
import { OrganizationModule } from "@modules/user-management/organization.module";
6-
import { Module } from "@nestjs/common";
6+
import { forwardRef, Module } from "@nestjs/common";
77
import { ConfigModule } from "@nestjs/config";
88
import { DataTargetService } from "@services/data-targets/data-target.service";
99
import { OS2IoTMail } from "@services/os2iot-mail.service";
@@ -15,7 +15,7 @@ import {
1515
@Module({
1616
imports: [
1717
SharedModule,
18-
ApplicationModule,
18+
forwardRef(() => ApplicationModule),
1919
OrganizationModule,
2020
ConfigModule.forRoot({ load: [configuration] }),
2121
],

src/services/data-targets/data-target.service.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,21 @@ import { OpenDataDkDataset } from "@entities/open-data-dk-dataset.entity";
1212
import { dataTargetTypeMap } from "@enum/data-target-type-mapping";
1313
import { DataTargetType } from "@enum/data-target-type.enum";
1414
import { ErrorCodes } from "@enum/error-codes.enum";
15-
import { BadRequestException, Inject, Injectable, Logger } from "@nestjs/common";
15+
import {
16+
BadRequestException,
17+
forwardRef,
18+
Inject,
19+
Injectable,
20+
Logger,
21+
} from "@nestjs/common";
1622
import { InjectRepository } from "@nestjs/typeorm";
1723
import { ApplicationService } from "@services/device-management/application.service";
1824
import { OS2IoTMail } from "@services/os2iot-mail.service";
1925
import { DeleteResult, Repository, SelectQueryBuilder } from "typeorm";
20-
import { CLIENT_SECRET_PROVIDER, ClientSecretProvider } from "../../helpers/fiware-token.helper";
26+
import {
27+
CLIENT_SECRET_PROVIDER,
28+
ClientSecretProvider,
29+
} from "../../helpers/fiware-token.helper";
2130
import { User } from "@entities/user.entity";
2231

2332
@Injectable()
@@ -27,9 +36,11 @@ export class DataTargetService {
2736
private dataTargetRepository: Repository<DataTarget>,
2837
@InjectRepository(User)
2938
private userRepository: Repository<User>,
39+
@Inject(forwardRef(() => ApplicationService))
3040
private applicationService: ApplicationService,
31-
@Inject(CLIENT_SECRET_PROVIDER) private clientSecretProvider: ClientSecretProvider,
32-
private oS2IoTMail: OS2IoTMail,
41+
@Inject(CLIENT_SECRET_PROVIDER)
42+
private clientSecretProvider: ClientSecretProvider,
43+
private oS2IoTMail: OS2IoTMail
3344
) {}
3445
private readonly logger = new Logger(DataTargetService.name);
3546

@@ -97,7 +108,7 @@ export class DataTargetService {
97108
): Promise<DataTarget[]> {
98109
const res = await this.dataTargetRepository
99110
.createQueryBuilder("dt")
100-
.addSelect('dt.clientSecret')
111+
.addSelect("dt.clientSecret")
101112
.innerJoin(
102113
"iot_device_payload_decoder_data_target_connection",
103114
"con",

src/services/device-management/application.service.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { OrganizationService } from "@services/user-management/organization.serv
2727
import { PermissionService } from "@services/user-management/permission.service";
2828
import { DeleteResult, In, Repository } from "typeorm";
2929
import { MulticastService } from "./multicast.service";
30+
import { DataTargetService } from "@services/data-targets/data-target.service";
3031

3132
@Injectable()
3233
export class ApplicationService {
@@ -40,7 +41,9 @@ export class ApplicationService {
4041
private multicastService: MulticastService,
4142
private chirpstackDeviceService: ChirpstackDeviceService,
4243
@Inject(forwardRef(() => PermissionService))
43-
private permissionService: PermissionService
44+
private permissionService: PermissionService,
45+
@Inject(forwardRef(() => DataTargetService))
46+
private dataTargetService: DataTargetService
4447
) {}
4548

4649
async findAndCountInList(
@@ -262,7 +265,7 @@ export class ApplicationService {
262265
async delete(id: number): Promise<DeleteResult> {
263266
const application = await this.applicationRepository.findOne({
264267
where: { id },
265-
relations: ["iotDevices", "multicasts"],
268+
relations: ["iotDevices", "multicasts", "dataTargets"],
266269
});
267270

268271
// Don't allow delete if this application contains any sigfox devices.
@@ -274,6 +277,10 @@ export class ApplicationService {
274277
throw new ConflictException(ErrorCodes.DeleteNotAllowedHasSigfoxDevice);
275278
}
276279

280+
for (const dataTarget of application.dataTargets) {
281+
await this.dataTargetService.delete(dataTarget.id);
282+
}
283+
277284
// Delete all LoRaWAN devices in ChirpStack
278285
const loRaWANDevices = application.iotDevices.filter(
279286
device => device.type === IoTDeviceType.LoRaWAN
@@ -293,7 +300,6 @@ export class ApplicationService {
293300
dbMulticast.lorawanMulticastDefinition.chirpstackGroupId
294301
);
295302
}
296-
297303
return this.applicationRepository.delete(id);
298304
}
299305

0 commit comments

Comments
 (0)