Merge branch 'dev' into add-check-log-to-trace-the-map-issue

This commit is contained in:
faris Aljohari
2025-06-25 18:42:43 -06:00
3 changed files with 40 additions and 24 deletions

View File

@ -102,8 +102,6 @@ export class DeviceStatusFirebaseService {
} }
console.log(`📝 Total logs to insert: ${allLogs.length}`); console.log(`📝 Total logs to insert: ${allLogs.length}`);
// Step 3: Insert logs in chunks with ON CONFLICT DO NOTHING
const insertLogsPromise = (async () => {
const chunkSize = 300; const chunkSize = 300;
let insertedCount = 0; let insertedCount = 0;
@ -155,7 +153,7 @@ export class DeviceStatusFirebaseService {
// Return null if device not found or no UUID // Return null if device not found or no UUID
return null; return null;
} catch (error) { } catch (error) {
// Handle the error silently, perhaps log it internally or ignore it console.error('❌ Error in addDeviceStatusToFirebase:', error);
return null; return null;
} }
} }

View File

@ -8,7 +8,10 @@ import { TuyaWebSocketService } from './services/tuya.web.socket.service';
import { OneSignalService } from './services/onesignal.service'; import { OneSignalService } from './services/onesignal.service';
import { DeviceMessagesService } from './services/device.messages.service'; import { DeviceMessagesService } from './services/device.messages.service';
import { DeviceRepositoryModule } from '../modules/device/device.repository.module'; import { DeviceRepositoryModule } from '../modules/device/device.repository.module';
import { DeviceNotificationRepository } from '../modules/device/repositories'; import {
DeviceNotificationRepository,
DeviceRepository,
} from '../modules/device/repositories';
import { DeviceStatusFirebaseModule } from '../firebase/devices-status/devices-status.module'; import { DeviceStatusFirebaseModule } from '../firebase/devices-status/devices-status.module';
import { CommunityPermissionService } from './services/community.permission.service'; import { CommunityPermissionService } from './services/community.permission.service';
import { CommunityRepository } from '../modules/community/repositories'; import { CommunityRepository } from '../modules/community/repositories';
@ -27,6 +30,7 @@ import { SosHandlerService } from './services/sos.handler.service';
DeviceNotificationRepository, DeviceNotificationRepository,
CommunityRepository, CommunityRepository,
SosHandlerService, SosHandlerService,
DeviceRepository,
], ],
exports: [ exports: [
HelperHashService, HelperHashService,

View File

@ -19,11 +19,13 @@ export class TuyaWebSocketService implements OnModuleInit {
}[] = []; }[] = [];
private isProcessing = false; private isProcessing = false;
private deviceCache: Map<string, any> = new Map();
constructor( constructor(
private readonly configService: ConfigService, private readonly configService: ConfigService,
private readonly deviceStatusFirebaseService: DeviceStatusFirebaseService, private readonly deviceStatusFirebaseService: DeviceStatusFirebaseService,
private readonly sosHandlerService: SosHandlerService, private readonly sosHandlerService: SosHandlerService,
private readonly deviceRepository: DeviceRepository,
) { ) {
this.isDevEnv = this.isDevEnv =
this.configService.get<string>('NODE_ENV') === 'development'; this.configService.get<string>('NODE_ENV') === 'development';
@ -36,6 +38,11 @@ export class TuyaWebSocketService implements OnModuleInit {
maxRetryTimes: 100, maxRetryTimes: 100,
}); });
this.loadAllActiveDevices();
// Reload device cache every 1 hour
setInterval(() => this.loadAllActiveDevices(), 60 * 60 * 1000);
if (this.configService.get<string>('tuya-config.TRUN_ON_TUYA_SOCKET')) { if (this.configService.get<string>('tuya-config.TRUN_ON_TUYA_SOCKET')) {
this.setupEventHandlers(); this.setupEventHandlers();
this.client.start(); this.client.start();
@ -86,8 +93,13 @@ export class TuyaWebSocketService implements OnModuleInit {
this.client.ackMessage(message.messageId); this.client.ackMessage(message.messageId);
return; return;
} }
if (this.sosHandlerService.isSosTriggered(status)) { if (this.sosHandlerService.isSosTriggered(status)) {
await this.sosHandlerService.handleSosEventFirebase(devId, logData); await this.sosHandlerService.handleSosEventFirebase(
devId,
logData,
this.deviceCache,
);
} else { } else {
// Firebase real-time update // Firebase real-time update
await this.deviceStatusFirebaseService.addDeviceStatusToFirebase({ await this.deviceStatusFirebaseService.addDeviceStatusToFirebase({
@ -144,12 +156,14 @@ export class TuyaWebSocketService implements OnModuleInit {
try { try {
await this.deviceStatusFirebaseService.addBatchDeviceStatusToOurDb( await this.deviceStatusFirebaseService.addBatchDeviceStatusToOurDb(
batch.map((item) => ({
batch.map((item) => ({ batch.map((item) => ({
deviceTuyaUuid: item.devId, deviceTuyaUuid: item.devId,
status: item.status, status: item.status,
log: item.logData, log: item.logData,
device: item.device, device: item.device,
})), })),
this.deviceCache,
); );
} catch (error) { } catch (error) {
console.error('❌ Error processing batch:', error); console.error('❌ Error processing batch:', error);