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`, {