mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-11-26 09:54:55 +00:00
Add functionality to retrieve Tap-to-Run scene details from Tuya API
This commit is contained in:
@ -21,3 +21,8 @@ export interface DeleteTapToRunSceneInterface {
|
|||||||
msg?: string;
|
msg?: string;
|
||||||
result: boolean;
|
result: boolean;
|
||||||
}
|
}
|
||||||
|
export interface SceneDetailsResult {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
type: string;
|
||||||
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import {
|
|||||||
AddTapToRunSceneInterface,
|
AddTapToRunSceneInterface,
|
||||||
DeleteTapToRunSceneInterface,
|
DeleteTapToRunSceneInterface,
|
||||||
GetTapToRunSceneByUnitInterface,
|
GetTapToRunSceneByUnitInterface,
|
||||||
|
SceneDetailsResult,
|
||||||
} from '../interface/scene.interface';
|
} from '../interface/scene.interface';
|
||||||
import { convertKeysToCamelCase } from '@app/common/helper/camelCaseConverter';
|
import { convertKeysToCamelCase } from '@app/common/helper/camelCaseConverter';
|
||||||
|
|
||||||
@ -256,6 +257,18 @@ export class SceneService {
|
|||||||
if (device) {
|
if (device) {
|
||||||
action.entityId = device.uuid;
|
action.entityId = device.uuid;
|
||||||
}
|
}
|
||||||
|
} else if (
|
||||||
|
action.actionExecutor !== 'device_issue' &&
|
||||||
|
action.actionExecutor !== 'delay'
|
||||||
|
) {
|
||||||
|
const sceneDetails = await this.getTapToRunSceneDetailsTuya(
|
||||||
|
action.entityId,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (sceneDetails.id) {
|
||||||
|
action.name = sceneDetails.name;
|
||||||
|
action.type = sceneDetails.type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,6 +288,38 @@ export class SceneService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async getTapToRunSceneDetailsTuya(
|
||||||
|
sceneId: string,
|
||||||
|
): Promise<SceneDetailsResult> {
|
||||||
|
try {
|
||||||
|
const path = `/v2.0/cloud/scene/rule/${sceneId}`;
|
||||||
|
const response = await this.tuya.request({
|
||||||
|
method: 'GET',
|
||||||
|
path,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.success) {
|
||||||
|
throw new HttpException(response.msg, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
const camelCaseResponse = convertKeysToCamelCase(response);
|
||||||
|
const { id, name, type } = camelCaseResponse.result;
|
||||||
|
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
} as SceneDetailsResult;
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof BadRequestException) {
|
||||||
|
throw err; // Re-throw BadRequestException
|
||||||
|
} else {
|
||||||
|
throw new HttpException(
|
||||||
|
'Scene not found for Tuya',
|
||||||
|
HttpStatus.NOT_FOUND,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
async updateTapToRunScene(
|
async updateTapToRunScene(
|
||||||
updateSceneTapToRunDto: UpdateSceneTapToRunDto,
|
updateSceneTapToRunDto: UpdateSceneTapToRunDto,
|
||||||
sceneId: string,
|
sceneId: string,
|
||||||
|
|||||||
Reference in New Issue
Block a user