- 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.
159 lines
4.6 KiB
TypeScript
159 lines
4.6 KiB
TypeScript
import { Injectable } from "@nestjs/common";
|
|
import { FreebitOperationsService } from "./freebit-operations.service";
|
|
import { FreebitMapperService } from "./freebit-mapper.service";
|
|
import type { SimDetails, SimUsage, SimTopUpHistory } from "../interfaces/freebit.types";
|
|
|
|
@Injectable()
|
|
export class FreebitOrchestratorService {
|
|
constructor(
|
|
private readonly operations: FreebitOperationsService,
|
|
private readonly mapper: FreebitMapperService
|
|
) {}
|
|
|
|
/**
|
|
* Get SIM account details
|
|
*/
|
|
async getSimDetails(account: string): Promise<SimDetails> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.getSimDetails(normalizedAccount);
|
|
}
|
|
|
|
/**
|
|
* Get SIM usage information
|
|
*/
|
|
async getSimUsage(account: string): Promise<SimUsage> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.getSimUsage(normalizedAccount);
|
|
}
|
|
|
|
/**
|
|
* Top up SIM data quota
|
|
*/
|
|
async topUpSim(
|
|
account: string,
|
|
quotaMb: number,
|
|
options: { campaignCode?: string; expiryDate?: string; scheduledAt?: string } = {}
|
|
): Promise<void> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.topUpSim(normalizedAccount, quotaMb, options);
|
|
}
|
|
|
|
/**
|
|
* Get SIM top-up history
|
|
*/
|
|
async getSimTopUpHistory(
|
|
account: string,
|
|
fromDate: string,
|
|
toDate: string
|
|
): Promise<SimTopUpHistory> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.getSimTopUpHistory(normalizedAccount, fromDate, toDate);
|
|
}
|
|
|
|
/**
|
|
* Change SIM plan
|
|
*/
|
|
async changeSimPlan(
|
|
account: string,
|
|
newPlanCode: string,
|
|
options: { assignGlobalIp?: boolean; scheduledAt?: string } = {}
|
|
): Promise<{ ipv4?: string; ipv6?: string }> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.changeSimPlan(normalizedAccount, newPlanCode, options);
|
|
}
|
|
|
|
/**
|
|
* Update SIM features
|
|
*/
|
|
async updateSimFeatures(
|
|
account: string,
|
|
features: {
|
|
voiceMailEnabled?: boolean;
|
|
callWaitingEnabled?: boolean;
|
|
internationalRoamingEnabled?: boolean;
|
|
networkType?: "4G" | "5G";
|
|
}
|
|
): Promise<void> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.updateSimFeatures(normalizedAccount, features);
|
|
}
|
|
|
|
/**
|
|
* Cancel SIM service
|
|
*/
|
|
async cancelSim(account: string, scheduledAt?: string): Promise<void> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.cancelSim(normalizedAccount, scheduledAt);
|
|
}
|
|
|
|
/**
|
|
* Reissue eSIM profile (simple)
|
|
*/
|
|
async reissueEsimProfile(account: string): Promise<void> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.reissueEsimProfile(normalizedAccount);
|
|
}
|
|
|
|
/**
|
|
* Reissue eSIM profile with enhanced options
|
|
*/
|
|
async reissueEsimProfileEnhanced(
|
|
account: string,
|
|
newEid: string,
|
|
options: { oldEid?: string; planCode?: string } = {}
|
|
): Promise<void> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(account);
|
|
return this.operations.reissueEsimProfileEnhanced(normalizedAccount, newEid, options);
|
|
}
|
|
|
|
/**
|
|
* Activate new eSIM account
|
|
*/
|
|
async activateEsimAccountNew(params: {
|
|
account: string;
|
|
eid: string;
|
|
planCode?: string;
|
|
contractLine?: "4G" | "5G";
|
|
aladinOperated?: "10" | "20";
|
|
shipDate?: string;
|
|
addKind?: "N" | "M" | "R";
|
|
simKind?: "E0" | "E2" | "E3"; // E0:音声あり, E2:SMSなし, E3:SMSあり
|
|
repAccount?: string;
|
|
deliveryCode?: string;
|
|
globalIp?: "10" | "20";
|
|
mnp?: { reserveNumber: string; reserveExpireDate?: string };
|
|
identity?: {
|
|
firstnameKanji?: string;
|
|
lastnameKanji?: string;
|
|
firstnameZenKana?: string;
|
|
lastnameZenKana?: string;
|
|
gender?: string;
|
|
birthday?: string;
|
|
};
|
|
}): Promise<void> {
|
|
const normalizedAccount = this.mapper.normalizeAccount(params.account);
|
|
return this.operations.activateEsimAccountNew({
|
|
account: normalizedAccount,
|
|
eid: params.eid,
|
|
planCode: params.planCode,
|
|
contractLine: params.contractLine,
|
|
aladinOperated: params.aladinOperated,
|
|
shipDate: params.shipDate,
|
|
addKind: params.addKind,
|
|
simKind: params.simKind,
|
|
repAccount: params.repAccount,
|
|
deliveryCode: params.deliveryCode,
|
|
globalIp: params.globalIp,
|
|
mnp: params.mnp,
|
|
identity: params.identity,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Health check
|
|
*/
|
|
async healthCheck(): Promise<boolean> {
|
|
return this.operations.healthCheck();
|
|
}
|
|
}
|