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

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();
}
}