From 71df9add8a30836d56319545eb1b4055de05b037 Mon Sep 17 00:00:00 2001 From: barsa Date: Fri, 3 Oct 2025 15:09:19 +0900 Subject: [PATCH] Refactor import paths across various services and controllers to align with the new domain structure, enhancing type safety and maintainability. Update Freebit integration to utilize provider methods for account normalization and schema validation. Streamline order-related services by importing types from the updated domain package, improving organization and consistency in data handling. --- .../integrations/freebit/interfaces/freebit.types.ts | 2 +- .../freebit/services/freebit-mapper.service.ts | 3 +-- .../freebit/services/freebit-operations.service.ts | 6 +++--- apps/bff/src/modules/orders/orders.controller.ts | 2 +- .../modules/orders/services/order-builder.service.ts | 2 +- .../order-fulfillment-orchestrator.service.ts | 10 +++++++++- .../services/order-fulfillment-validator.service.ts | 4 ++-- .../orders/services/order-item-builder.service.ts | 2 +- .../orders/services/order-orchestrator.service.ts | 2 +- .../orders/services/order-pricebook.service.ts | 11 ++++++----- .../orders/services/order-validator.service.ts | 2 +- packages/domain/sim/providers/freebit/mapper.ts | 4 ++++ packages/domain/src/validation/api/requests.d.ts | 2 +- packages/domain/src/validation/business/orders.d.ts | 4 ++-- packages/domain/src/validation/shared/entities.d.ts | 4 ++-- packages/domain/src/validation/shared/primitives.d.ts | 2 +- 16 files changed, 37 insertions(+), 25 deletions(-) diff --git a/apps/bff/src/integrations/freebit/interfaces/freebit.types.ts b/apps/bff/src/integrations/freebit/interfaces/freebit.types.ts index 2ce6d8f5..87fb4c9d 100644 --- a/apps/bff/src/integrations/freebit/interfaces/freebit.types.ts +++ b/apps/bff/src/integrations/freebit/interfaces/freebit.types.ts @@ -310,7 +310,7 @@ export interface FreebitEsimAccountActivationResponse { } // Portal-specific types for SIM management -export type { SimDetails, SimUsage, SimTopUpHistory } from "@customer-portal/contracts/sim"; +export type { SimDetails, SimUsage, SimTopUpHistory } from "@customer-portal/domain/sim"; // Error handling export interface FreebitError extends Error { diff --git a/apps/bff/src/integrations/freebit/services/freebit-mapper.service.ts b/apps/bff/src/integrations/freebit/services/freebit-mapper.service.ts index 56d41716..1e496877 100644 --- a/apps/bff/src/integrations/freebit/services/freebit-mapper.service.ts +++ b/apps/bff/src/integrations/freebit/services/freebit-mapper.service.ts @@ -6,7 +6,6 @@ import type { } from "../interfaces/freebit.types"; import type { SimDetails, SimTopUpHistory, SimUsage } from "@customer-portal/domain/sim"; import { Providers } from "@customer-portal/domain/sim"; -import { normalizeAccount as normalizeAccountUtil } from "@customer-portal/integrations-freebit/utils"; @Injectable() export class FreebitMapperService { @@ -35,7 +34,7 @@ export class FreebitMapperService { * Normalize account identifier (remove formatting) */ normalizeAccount(account: string): string { - return normalizeAccountUtil(account); + return Providers.Freebit.normalizeAccount(account); } /** 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 65ba7e2e..dd3017fd 100644 --- a/apps/bff/src/integrations/freebit/services/freebit-operations.service.ts +++ b/apps/bff/src/integrations/freebit/services/freebit-operations.service.ts @@ -221,7 +221,7 @@ export class FreebitOperationsService { ): Promise<{ ipv4?: string; ipv6?: string }> { // Import and validate with the schema const { freebitPlanChangeRequestSchema } = await import( - "@customer-portal/schemas/integrations/freebit/requests/plan-change.schema" + "@customer-portal/domain/sim/providers/freebit/requests" ); try { @@ -281,7 +281,7 @@ export class FreebitOperationsService { try { // Import and validate with the new schema const { freebitSimFeaturesRequestSchema } = await import( - "@customer-portal/schemas/integrations/freebit/requests/features.schema" + "@customer-portal/domain/sim/providers/freebit/requests" ); const validatedFeatures = freebitSimFeaturesRequestSchema.parse({ @@ -481,7 +481,7 @@ export class FreebitOperationsService { // Import schemas dynamically to avoid circular dependencies const { freebitEsimActivationParamsSchema, freebitEsimActivationRequestSchema } = await import( - "@customer-portal/schemas/integrations/freebit/requests/esim-activation.schema" + "@customer-portal/domain/sim/providers/freebit/requests" ); // Validate input parameters diff --git a/apps/bff/src/modules/orders/orders.controller.ts b/apps/bff/src/modules/orders/orders.controller.ts index 8eb06217..74d02d1e 100644 --- a/apps/bff/src/modules/orders/orders.controller.ts +++ b/apps/bff/src/modules/orders/orders.controller.ts @@ -8,7 +8,7 @@ import { sfOrderIdParamSchema, type CreateOrderRequest, type SfOrderIdParam, -} from "@customer-portal/domain"; +} from "@customer-portal/domain/orders"; @Controller("orders") export class OrdersController { diff --git a/apps/bff/src/modules/orders/services/order-builder.service.ts b/apps/bff/src/modules/orders/services/order-builder.service.ts index 1bec396c..4bfb11e2 100644 --- a/apps/bff/src/modules/orders/services/order-builder.service.ts +++ b/apps/bff/src/modules/orders/services/order-builder.service.ts @@ -1,6 +1,6 @@ import { Injectable, Inject } from "@nestjs/common"; import { Logger } from "nestjs-pino"; -import type { OrderBusinessValidation, UserMapping } from "@customer-portal/domain"; +import type { OrderBusinessValidation, UserMapping } from "@customer-portal/domain/orders"; import { SalesforceFieldMapService, type SalesforceFieldMap } from "@bff/core/config/field-map"; import { UsersService } from "@bff/modules/users/users.service"; type OrderBuilderFieldKey = diff --git a/apps/bff/src/modules/orders/services/order-fulfillment-orchestrator.service.ts b/apps/bff/src/modules/orders/services/order-fulfillment-orchestrator.service.ts index 389c7f26..7a705ea7 100644 --- a/apps/bff/src/modules/orders/services/order-fulfillment-orchestrator.service.ts +++ b/apps/bff/src/modules/orders/services/order-fulfillment-orchestrator.service.ts @@ -16,7 +16,15 @@ import { SimFulfillmentService } from "./sim-fulfillment.service"; import { DistributedTransactionService } from "@bff/core/database/services/distributed-transaction.service"; import { getErrorMessage } from "@bff/core/utils/error.util"; import { SalesforceFieldMapService } from "@bff/core/config/field-map"; -import type { OrderDetailsResponse } from "@customer-portal/domain"; +import type { OrderDetailsResponse } from "@customer-portal/domain/orders"; +import { + orderSummarySchema, + orderStatusSchema, + z, + type OrderSummary, + type SalesforceOrderRecord, + type SalesforceOrderItemRecord, +} from "@customer-portal/domain/orders"; import type { FulfillmentOrderDetails, FulfillmentOrderItem } from "../types/fulfillment.types"; export interface OrderFulfillmentStep { diff --git a/apps/bff/src/modules/orders/services/order-fulfillment-validator.service.ts b/apps/bff/src/modules/orders/services/order-fulfillment-validator.service.ts index cc3341e7..2c404a02 100644 --- a/apps/bff/src/modules/orders/services/order-fulfillment-validator.service.ts +++ b/apps/bff/src/modules/orders/services/order-fulfillment-validator.service.ts @@ -4,9 +4,9 @@ import { SalesforceService } from "@bff/integrations/salesforce/salesforce.servi import { WhmcsPaymentService } from "@bff/integrations/whmcs/services/whmcs-payment.service"; import { MappingsService } from "@bff/modules/id-mappings/mappings.service"; import { getErrorMessage } from "@bff/core/utils/error.util"; -import type { SalesforceOrderRecord } from "@customer-portal/domain"; +import type { SalesforceOrderRecord } from "@customer-portal/domain/orders"; import { SalesforceFieldMapService, type SalesforceFieldMap } from "@bff/core/config/field-map"; -import { sfOrderIdParamSchema } from "@customer-portal/domain"; +import { sfOrderIdParamSchema } from "@customer-portal/domain/orders"; type OrderStringFieldKey = "activationStatus"; export interface OrderFulfillmentValidationResult { diff --git a/apps/bff/src/modules/orders/services/order-item-builder.service.ts b/apps/bff/src/modules/orders/services/order-item-builder.service.ts index 64936491..e7d4e039 100644 --- a/apps/bff/src/modules/orders/services/order-item-builder.service.ts +++ b/apps/bff/src/modules/orders/services/order-item-builder.service.ts @@ -3,7 +3,7 @@ import { Logger } from "nestjs-pino"; import { SalesforceConnection } from "@bff/integrations/salesforce/services/salesforce-connection.service"; import { OrderPricebookService } from "./order-pricebook.service"; import { PrismaService } from "@bff/infra/database/prisma.service"; -import { createOrderRequestSchema } from "@customer-portal/domain"; +import { createOrderRequestSchema } from "@customer-portal/domain/orders"; /** * Handles building order items from SKU data diff --git a/apps/bff/src/modules/orders/services/order-orchestrator.service.ts b/apps/bff/src/modules/orders/services/order-orchestrator.service.ts index f643bc4f..c64311c7 100644 --- a/apps/bff/src/modules/orders/services/order-orchestrator.service.ts +++ b/apps/bff/src/modules/orders/services/order-orchestrator.service.ts @@ -13,7 +13,7 @@ import { type SalesforceOrderItemRecord, type SalesforceQueryResult, type SalesforceProduct2Record, -} from "@customer-portal/domain"; +} from "@customer-portal/domain/orders"; import { SalesforceFieldMapService, type SalesforceFieldMap } from "@bff/core/config/field-map"; import { assertSalesforceId, buildInClause } from "@bff/integrations/salesforce/utils/soql.util"; import { getErrorMessage } from "@bff/core/utils/error.util"; diff --git a/apps/bff/src/modules/orders/services/order-pricebook.service.ts b/apps/bff/src/modules/orders/services/order-pricebook.service.ts index 0371240c..b522934f 100644 --- a/apps/bff/src/modules/orders/services/order-pricebook.service.ts +++ b/apps/bff/src/modules/orders/services/order-pricebook.service.ts @@ -4,11 +4,12 @@ import { Logger } from "nestjs-pino"; import { SalesforceConnection } from "@bff/integrations/salesforce/services/salesforce-connection.service"; import { SalesforceFieldMapService } from "@bff/core/config/field-map"; import { getStringField } from "@bff/modules/catalog/utils/salesforce-product.mapper"; -import type { - SalesforcePricebookEntryRecord, - SalesforceProduct2Record, - SalesforceQueryResult, -} from "@customer-portal/domain"; +import { + z, + type SalesforceProduct2Record, + type SalesforceQueryResult, + type SalesforceQueryRecord, +} from "@customer-portal/domain/orders"; import { assertSalesforceId, buildInClause, diff --git a/apps/bff/src/modules/orders/services/order-validator.service.ts b/apps/bff/src/modules/orders/services/order-validator.service.ts index fa1565ae..a2349516 100644 --- a/apps/bff/src/modules/orders/services/order-validator.service.ts +++ b/apps/bff/src/modules/orders/services/order-validator.service.ts @@ -9,7 +9,7 @@ import { orderBusinessValidationSchema, type CreateOrderRequest, type OrderBusinessValidation, -} from "@customer-portal/domain"; +} from "@customer-portal/domain/orders"; import type { WhmcsProduct } from "@bff/integrations/whmcs/types/whmcs-api.types"; import { OrderPricebookService } from "./order-pricebook.service"; diff --git a/packages/domain/sim/providers/freebit/mapper.ts b/packages/domain/sim/providers/freebit/mapper.ts index eacd662c..86d66bc9 100644 --- a/packages/domain/sim/providers/freebit/mapper.ts +++ b/packages/domain/sim/providers/freebit/mapper.ts @@ -146,3 +146,7 @@ export function transformFreebitQuotaHistory(raw: unknown): SimTopUpHistory { return simTopUpHistorySchema.parse(history); } +export function normalizeAccount(account: string): string { + return account.replace(/\D/g, ""); +} + diff --git a/packages/domain/src/validation/api/requests.d.ts b/packages/domain/src/validation/api/requests.d.ts index bde369e1..bd6ddf3c 100644 --- a/packages/domain/src/validation/api/requests.d.ts +++ b/packages/domain/src/validation/api/requests.d.ts @@ -168,8 +168,8 @@ export declare const orderConfigurationsSchema: z.ZodObject<{ }, z.core.$strip>; export declare const createOrderRequestSchema: z.ZodObject<{ orderType: z.ZodEnum<{ - Internet: "Internet"; SIM: "SIM"; + Internet: "Internet"; VPN: "VPN"; Other: "Other"; }>; diff --git a/packages/domain/src/validation/business/orders.d.ts b/packages/domain/src/validation/business/orders.d.ts index 8c13a6f0..563c8085 100644 --- a/packages/domain/src/validation/business/orders.d.ts +++ b/packages/domain/src/validation/business/orders.d.ts @@ -1,8 +1,8 @@ import { z } from "zod"; export declare const orderBusinessValidationSchema: z.ZodObject<{ orderType: z.ZodEnum<{ - Internet: "Internet"; SIM: "SIM"; + Internet: "Internet"; VPN: "VPN"; Other: "Other"; }>; @@ -54,8 +54,8 @@ export declare const skuValidationSchema: z.ZodObject<{ sku: z.ZodString; isActive: z.ZodBoolean; productType: z.ZodEnum<{ - Internet: "Internet"; SIM: "SIM"; + Internet: "Internet"; VPN: "VPN"; Addon: "Addon"; Fee: "Fee"; diff --git a/packages/domain/src/validation/shared/entities.d.ts b/packages/domain/src/validation/shared/entities.d.ts index d760d30f..2d49b663 100644 --- a/packages/domain/src/validation/shared/entities.d.ts +++ b/packages/domain/src/validation/shared/entities.d.ts @@ -31,9 +31,9 @@ export declare const casePrioritySchema: z.ZodEnum<{ }>; export declare const paymentStatusSchema: z.ZodEnum<{ pending: "pending"; - processing: "processing"; completed: "completed"; failed: "failed"; + processing: "processing"; cancelled: "cancelled"; refunded: "refunded"; }>; @@ -164,9 +164,9 @@ export declare const paymentSchema: z.ZodObject<{ currency: z.ZodOptional; status: z.ZodEnum<{ pending: "pending"; - processing: "processing"; completed: "completed"; failed: "failed"; + processing: "processing"; cancelled: "cancelled"; refunded: "refunded"; }>; diff --git a/packages/domain/src/validation/shared/primitives.d.ts b/packages/domain/src/validation/shared/primitives.d.ts index d7722bf5..4d0f382c 100644 --- a/packages/domain/src/validation/shared/primitives.d.ts +++ b/packages/domain/src/validation/shared/primitives.d.ts @@ -31,9 +31,9 @@ export declare const genderEnum: z.ZodEnum<{ other: "other"; }>; export declare const statusEnum: z.ZodEnum<{ + pending: "pending"; active: "active"; inactive: "inactive"; - pending: "pending"; suspended: "suspended"; }>; export declare const priorityEnum: z.ZodEnum<{