Skip to content

Commit 75ead1e

Browse files
augusthjerrildAugustHA-Iteratorfcv-iteratorIt
authored
Append copied device datatargets (#280)
* added append endpoint * PR change --------- Co-authored-by: August Andersen <[email protected]> Co-authored-by: Frederik Christ Vestergaard <[email protected]>
1 parent b568d5a commit 75ead1e

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

src/controllers/admin-controller/iot-device-payload-decoder-data-target-connection.controller.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import { IoTDeviceService } from "@services/device-management/iot-device.service
4141
import { AuditLog } from "@services/audit-log.service";
4242
import { ActionType } from "@entities/audit-log-entry";
4343
import { ApiAuth } from "@auth/swagger-auth-decorator";
44+
import { AppendCopiedDeviceDto } from "@dto/append-copied-device.dto";
4445

4546
@ApiTags("IoT-Device, PayloadDecoder and DataTarget Connection")
4647
@Controller("iot-device-payload-decoder-data-target-connection")
@@ -205,6 +206,33 @@ export class IoTDevicePayloadDecoderDataTargetConnectionController {
205206
}
206207
}
207208

209+
@Put("appendCopiedDevice/:id")
210+
@ApplicationAdmin()
211+
@ApiNotFoundResponse({
212+
description: "If the id of the entity doesn't exist",
213+
})
214+
@ApiBadRequestResponse({
215+
description: "If one or more of the id's are invalid references.",
216+
})
217+
async appendCopiedDevice(
218+
@Req() req: AuthenticatedRequest,
219+
@Param("id", new ParseIntPipe()) id: number,
220+
@Body() dto: AppendCopiedDeviceDto
221+
): Promise<IoTDevicePayloadDecoderDataTargetConnection> {
222+
try {
223+
const newIotDevice = await this.iotDeviceService.findOne(dto.deviceId);
224+
checkIfUserHasAccessToApplication(req, newIotDevice.application.id, ApplicationAccessScope.Write);
225+
226+
const result = await this.service.appendCopiedDevice(id, newIotDevice, req.user.userId);
227+
228+
AuditLog.success(ActionType.UPDATE, IoTDevicePayloadDecoderDataTargetConnection.name, req.user.userId, result.id);
229+
return result;
230+
} catch (err) {
231+
AuditLog.fail(ActionType.UPDATE, IoTDevicePayloadDecoderDataTargetConnection.name, req.user.userId, id);
232+
throw err;
233+
}
234+
}
235+
208236
@Delete(":id")
209237
@ApplicationAdmin()
210238
@ApiNotFoundResponse({
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { ApiProperty } from "@nestjs/swagger";
2+
import { IsNumber } from "class-validator";
3+
4+
export class AppendCopiedDeviceDto {
5+
@ApiProperty({ required: true })
6+
@IsNumber()
7+
deviceId: number;
8+
}

src/services/device-management/iot-device-payload-decoder-data-target-connection.service.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { PayloadDecoderService } from "@services/data-management/payload-decoder
1212
import { DataTargetService } from "@services/data-targets/data-target.service";
1313

1414
import { IoTDeviceService } from "./iot-device.service";
15+
import { IoTDevice } from "@entities/iot-device.entity";
1516

1617
@Injectable()
1718
export class IoTDevicePayloadDecoderDataTargetConnectionService {
@@ -173,6 +174,27 @@ export class IoTDevicePayloadDecoderDataTargetConnectionService {
173174
return await this.repository.save(mapped);
174175
}
175176

177+
async appendCopiedDevice(
178+
id: number,
179+
iotDevice: IoTDevice,
180+
userId: number
181+
): Promise<IoTDevicePayloadDecoderDataTargetConnection> {
182+
let connection;
183+
try {
184+
connection = await this.repository.findOneOrFail({
185+
where: { id },
186+
relations: ["iotDevices"],
187+
});
188+
} catch (err) {
189+
throw new NotFoundException(`Could not find IoTDevicePayloadDecoderDataTargetConnection by id: ${id}`);
190+
}
191+
192+
connection.iotDevices.push(iotDevice);
193+
connection.updatedBy = userId;
194+
195+
return await this.repository.save(connection);
196+
}
197+
176198
async delete(id: number): Promise<DeleteResult> {
177199
return await this.repository.delete(id);
178200
}

0 commit comments

Comments
 (0)