# SIM Manager Migration Package This folder contains all the code, logic, and rules for the SIM Manager feature and Freebit API integration. Use this package when migrating SIM Manager functionality to a different branch. ## ๐Ÿ“ Folder Structure ``` sim-manager-migration/ โ”œโ”€โ”€ backend/ โ”‚ โ”œโ”€โ”€ freebit-integration/ # Freebit API integration layer โ”‚ โ”‚ โ”œโ”€โ”€ services/ # Freebit API service implementations โ”‚ โ”‚ โ”œโ”€โ”€ interfaces/ # TypeScript interfaces and types โ”‚ โ”‚ โ””โ”€โ”€ freebit.module.ts # NestJS module โ”‚ โ”œโ”€โ”€ sim-management/ # SIM management business logic โ”‚ โ”‚ โ”œโ”€โ”€ services/ # SIM management services โ”‚ โ”‚ โ”œโ”€โ”€ types/ # Request/response types โ”‚ โ”‚ โ”œโ”€โ”€ interfaces/ # Business logic interfaces โ”‚ โ”‚ โ”œโ”€โ”€ sim-management.module.ts # NestJS module โ”‚ โ”‚ โ””โ”€โ”€ sim-management.service.ts # Main service facade โ”‚ โ””โ”€โ”€ controllers/ # API endpoint definitions โ”‚ โ””โ”€โ”€ sim-endpoints.controller.ts โ”œโ”€โ”€ frontend/ # React/Next.js components โ”‚ โ”œโ”€โ”€ components/ # SIM management UI components โ”‚ โ”œโ”€โ”€ utils/ # Frontend utilities โ”‚ โ””โ”€โ”€ index.ts # Exports โ””โ”€โ”€ docs/ # Documentation โ”œโ”€โ”€ FREEBIT-SIM-MANAGEMENT.md # Complete implementation guide โ””โ”€โ”€ SIM-MANAGEMENT-API-DATA-FLOW.md # API data flow documentation ``` ## ๐Ÿš€ Migration Steps ### 1. Backend Setup #### Step 1.1: Copy Freebit Integration Copy the entire `backend/freebit-integration/` folder to: ``` apps/bff/src/integrations/freebit/ ``` #### Step 1.2: Copy SIM Management Module Copy the entire `backend/sim-management/` folder to: ``` apps/bff/src/modules/subscriptions/sim-management/ ``` Also copy: ``` backend/sim-management/sim-management.service.ts ``` to: ``` apps/bff/src/modules/subscriptions/sim-management.service.ts ``` #### Step 1.3: Add Controller Endpoints The file `backend/controllers/sim-endpoints.controller.ts` contains all SIM-related endpoints. You need to: 1. **Option A**: Add these methods to your existing `SubscriptionsController` 2. **Option B**: Create a separate `SimManagementController` and register it The endpoints are: - `GET /api/subscriptions/:id/sim` - Get comprehensive SIM info - `GET /api/subscriptions/:id/sim/details` - Get SIM details - `GET /api/subscriptions/:id/sim/usage` - Get usage data - `GET /api/subscriptions/:id/sim/top-up-history` - Get top-up history - `POST /api/subscriptions/:id/sim/top-up` - Top up data quota - `POST /api/subscriptions/:id/sim/change-plan` - Change plan - `POST /api/subscriptions/:id/sim/cancel` - Cancel SIM - `POST /api/subscriptions/:id/sim/reissue-esim` - Reissue eSIM - `POST /api/subscriptions/:id/sim/features` - Update features - `GET /api/subscriptions/:id/sim/debug` - Debug endpoint #### Step 1.4: Register Modules Ensure your main app module imports both modules: ```typescript // apps/bff/src/app.module.ts or subscriptions.module.ts import { FreebitModule } from "@bff/integrations/freebit/freebit.module"; import { SimManagementModule } from "@bff/modules/subscriptions/sim-management/sim-management.module"; @Module({ imports: [ // ... other modules FreebitModule, SimManagementModule, ], // ... }) ``` ### 2. Frontend Setup #### Step 2.1: Copy Frontend Components Copy the entire `frontend/` folder to: ``` apps/portal/src/features/sim-management/ ``` #### Step 2.2: Integrate into Subscription Page The main component is `SimManagementSection.tsx`. Import and use it in your subscription detail page: ```typescript import { SimManagementSection } from "@/features/sim-management"; // In your subscription detail component: ``` ### 3. Environment Configuration Add these environment variables to your `.env` file: ```bash # Freebit API Configuration FREEBIT_BASE_URL=https://i1-q.mvno.net/emptool/api/ # Production: FREEBIT_BASE_URL=https://i1.mvno.net/emptool/api FREEBIT_OEM_ID=PASI FREEBIT_OEM_KEY=your_oem_key_here FREEBIT_TIMEOUT=30000 FREEBIT_RETRY_ATTEMPTS=3 ``` ### 4. Dependencies #### Required NestJS Modules - `@nestjs/common` - `@nestjs/config` - `nestjs-pino` (for logging) #### Required Services The SIM Manager depends on these services (ensure they exist in your branch): 1. **WHMCS Integration** (for top-up payments): - `WhmcsService` with `createInvoice()` and `capturePayment()` methods - Required for the top-up payment flow 2. **Subscriptions Service**: - `SubscriptionsService` - for subscription data access 3. **Mappings Service**: - `MappingsModule` - for ID mapping between systems 4. **Email Service**: - `EmailModule` - for notifications 5. **Sim Usage Store**: - `SimUsageStoreService` - for caching usage data ### 5. Type Definitions The code uses types from `@customer-portal/domain`. Ensure these types are available: - `SimTopupRequest` - `SimChangePlanRequest` - `SimCancelRequest` - `SimFeaturesRequest` - `SimDetails` - `SimUsage` - `SimTopUpHistory` If these don't exist in your domain package, they are defined in: - `backend/sim-management/types/sim-requests.types.ts` - `backend/freebit-integration/interfaces/freebit.types.ts` ## ๐Ÿ“‹ Freebit API Endpoints Used The implementation uses the following Freebit APIs: 1. **PA01-01**: OEM Authentication (`/authOem/`) 2. **PA03-02**: Get Account Details (`/mvno/getDetail/`) 3. **PA04-04**: Add Specs & Quota (`/master/addSpec/`) 4. **PA05-01**: MVNO Communication Information (`/mvno/getTrafficInfo/`) 5. **PA05-02**: MVNO Quota Addition History (`/mvno/getQuotaHistory/`) 6. **PA05-04**: MVNO Plan Cancellation (`/mvno/releasePlan/`) 7. **PA05-21**: MVNO Plan Change (`/mvno/changePlan/`) 8. **PA05-22**: MVNO Quota Settings (`/mvno/eachQuota/`) 9. **PA05-42**: eSIM Profile Reissue (`/esim/reissueProfile/`) 10. **Enhanced**: eSIM Add Account/Reissue (`/mvno/esim/addAcnt/`) ## ๐Ÿ”ง Key Features ### SIM Management Operations - โœ… View SIM details (ICCID, MSISDN, plan, status) - โœ… Real-time data usage monitoring - โœ… Data quota top-up with payment processing (1GB = ยฅ500) - โœ… eSIM profile reissue - โœ… SIM service cancellation - โœ… Plan change functionality - โœ… Usage history tracking - โœ… Service options management (Voice Mail, Call Waiting, Roaming) ### Payment Flow (Top-Up) The top-up feature includes a complete payment flow: 1. User requests top-up amount 2. WHMCS invoice created 3. Payment captured automatically 4. Freebit API called to add quota 5. Success/error handling ## ๐Ÿ“š Documentation - **FREEBIT-SIM-MANAGEMENT.md**: Complete implementation guide with all features, API endpoints, and configuration - **SIM-MANAGEMENT-API-DATA-FLOW.md**: Detailed API data flow and system architecture documentation ## โš ๏ธ Important Notes 1. **WHMCS Integration Required**: The top-up feature requires WHMCS integration with `createInvoice()` and `capturePayment()` methods. If these don't exist in your branch, you'll need to implement them or modify the top-up service. 2. **Module Dependencies**: The `FreebitModule` and `SimManagementModule` have circular dependencies resolved with `forwardRef()`. Ensure this pattern is maintained. 3. **Authentication**: All endpoints require authentication. The controller uses `@ApiBearerAuth()` and expects a JWT token. 4. **Validation**: Request validation uses Zod schemas. Ensure `ZodValidationPipe` is available in your validation utilities. 5. **Error Handling**: The implementation includes comprehensive error handling and user-friendly error messages. ## ๐Ÿงช Testing After migration, test the following: 1. **SIM Details**: Verify SIM information displays correctly 2. **Usage Data**: Check that usage charts and data are accurate 3. **Top-Up**: Test the complete payment flow 4. **Plan Change**: Verify plan changes work correctly 5. **eSIM Reissue**: Test eSIM profile reissue (if applicable) 6. **Error Handling**: Test error scenarios (invalid subscription, API failures, etc.) ## ๐Ÿ” Troubleshooting ### Common Issues 1. **"Module not found" errors**: Ensure all modules are properly imported in your app module 2. **"FREEBIT_OEM_KEY is not configured"**: Add the environment variable 3. **Payment failures**: Verify WHMCS integration is working 4. **API timeouts**: Check Freebit API connectivity and increase timeout if needed ### Debug Endpoints Use the debug endpoint to troubleshoot: ``` GET /api/subscriptions/:id/sim/debug GET /api/debug/sim-details/:account ``` ## ๐Ÿ“ž Support For detailed implementation information, refer to: - `docs/FREEBIT-SIM-MANAGEMENT.md` - Complete feature documentation - `docs/SIM-MANAGEMENT-API-DATA-FLOW.md` - API integration details --- **Last Updated**: January 2025 **Migration Package Version**: 1.0