From b7f6c204e2a589bf76832a7f1110996b100b883b Mon Sep 17 00:00:00 2001 From: barsa Date: Wed, 26 Nov 2025 16:51:54 +0900 Subject: [PATCH] Refactor FreebitOperationsService to enforce API constraints on voice features and network type changes - Updated logic to prevent simultaneous updates of voice features and network type, ensuring compliance with Freebit API requirements. - Introduced error handling to guide users on proper sequencing of operations using SimManagementQueueService. - Improved code clarity by removing outdated comments and consolidating operation handling. --- .../services/freebit-operations.service.ts | 52 ++++--------------- 1 file changed, 10 insertions(+), 42 deletions(-) diff --git a/apps/bff/src/integrations/freebit/services/freebit-operations.service.ts b/apps/bff/src/integrations/freebit/services/freebit-operations.service.ts index fe6cb7b8..9b86114c 100644 --- a/apps/bff/src/integrations/freebit/services/freebit-operations.service.ts +++ b/apps/bff/src/integrations/freebit/services/freebit-operations.service.ts @@ -446,50 +446,18 @@ export class FreebitOperationsService { const hasVoiceFeatures = Object.values(voiceFeatures).some(value => typeof value === "boolean"); const hasNetworkTypeChange = typeof features.networkType === "string"; - // Execute in sequence with 30-minute delays as per Freebit API requirements + // Freebit API requires voice features and network type changes to be 30 minutes apart. + // This service handles single operations only - callers must coordinate sequencing via + // SimManagementQueueService for deferred network type changes after voice updates. if (hasVoiceFeatures && hasNetworkTypeChange) { - // Both voice features and network type change requested - this.logger.log(`Updating both voice features and network type with required 30-minute delay`, { - account, - hasVoiceFeatures, - hasNetworkTypeChange, - }); + throw new BadRequestException( + "Cannot update voice features and network type simultaneously. " + + "Voice and network type changes must be 30 minutes apart per Freebit API requirements. " + + "Use SimManagementQueueService to schedule the network type change after voice updates." + ); + } - // Step 1: Update voice features immediately (PA05-06) - await this.updateVoiceFeatures(account, voiceFeatures); - this.logger.log(`Voice features updated, scheduling network type change in 30 minutes`, { - account, - networkType: features.networkType, - }); - - // Step 2: Schedule network type change 30 minutes later (PA05-38) - // Note: This uses setTimeout which is not ideal for production - // Consider using a job queue like Bull or agenda for production - setTimeout(async () => { - try { - await this.updateNetworkType(account, features.networkType!); - this.logger.log(`Network type change completed after 30-minute delay`, { - account, - networkType: features.networkType, - }); - } catch (error) { - this.logger.error(`Failed to update network type after 30-minute delay`, { - account, - networkType: features.networkType, - error: getErrorMessage(error), - }); - } - }, 30 * 60 * 1000); // 30 minutes - - this.logger.log(`Voice features updated immediately, network type scheduled for 30 minutes`, { - account, - voiceMailEnabled: features.voiceMailEnabled, - callWaitingEnabled: features.callWaitingEnabled, - internationalRoamingEnabled: features.internationalRoamingEnabled, - networkType: features.networkType, - }); - - } else if (hasVoiceFeatures) { + if (hasVoiceFeatures) { // Only voice features (PA05-06) await this.updateVoiceFeatures(account, voiceFeatures); this.logger.log(`Voice features updated successfully`, {