tema 675f7d5cfd Remove cached profile fields migration and update CSRF middleware for new public auth endpoints
- Deleted migration file that removed cached profile fields from the users table, centralizing profile data retrieval from WHMCS.
- Updated CsrfMiddleware to include new public authentication endpoints for password reset, setting password, and WHMCS account linking.
- Enhanced error handling in password and WHMCS linking workflows to provide clearer feedback on missing mappings and improve user experience.
- Adjusted user creation and update methods in UsersFacade to handle cases where WHMCS mappings are not yet available, ensuring smoother account setup.
2025-11-21 17:12:34 +09:00

8.8 KiB

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:

// 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:

import { SimManagementSection } from "@/features/sim-management";

// In your subscription detail component:
<SimManagementSection subscriptionId={subscriptionId} />

3. Environment Configuration

Add these environment variables to your .env file:

# 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