From d00c47f41e11f49f64cde503ab55c2791ff5e3a5 Mon Sep 17 00:00:00 2001 From: "T. Narantuya" Date: Thu, 28 Aug 2025 18:27:11 +0900 Subject: [PATCH] Refactor code for consistency and readability across multiple files - Standardized JSON and URL-encoded body parser configurations in main.ts. - Simplified method signatures in order-builder.service.ts and order-orchestrator.service.ts. - Enhanced logging format in order-item-builder.service.ts and order-validator.service.ts. - Cleaned up whitespace and formatting in various components and services for improved readability. - Updated Docker commands in manage.sh to use the new syntax. --- apps/bff/src/main.ts | 6 +- .../orders/services/order-builder.service.ts | 12 +-- .../services/order-item-builder.service.ts | 28 +++--- .../services/order-orchestrator.service.ts | 17 ++-- .../services/order-validator.service.ts | 6 +- apps/bff/src/users/users.service.ts | 2 +- apps/portal/src/app/account/billing/page.tsx | 87 ++++++++++------- .../app/catalog/internet/configure/page.tsx | 38 ++++---- .../src/app/catalog/sim/configure/page.tsx | 89 +++++++++++------- apps/portal/src/app/checkout/page.tsx | 81 ++++++++++------ apps/portal/src/app/orders/[id]/page.tsx | 5 +- apps/portal/src/app/orders/page.tsx | 27 ++++-- .../components/catalog/activation-form.tsx | 14 ++- .../src/components/catalog/mnp-form.tsx | 80 +++++++++++----- .../src/components/catalog/progress-steps.tsx | 12 ++- .../components/catalog/sim-type-selector.tsx | 10 +- .../checkout/address-confirmation.tsx | 94 ++++++++++--------- apps/portal/src/lib/api.ts | 4 +- scripts/prod/manage.sh | 38 ++++---- 19 files changed, 381 insertions(+), 269 deletions(-) diff --git a/apps/bff/src/main.ts b/apps/bff/src/main.ts index 44f35149..cd82b151 100644 --- a/apps/bff/src/main.ts +++ b/apps/bff/src/main.ts @@ -53,14 +53,12 @@ async function bootstrap() { } // Configure JSON body parser with proper limits - app.use(express.json({ limit: '10mb' })); - app.use(express.urlencoded({ extended: true, limit: '10mb' })); + app.use(express.json({ limit: "10mb" })); + app.use(express.urlencoded({ extended: true, limit: "10mb" })); // Enhanced cookie parser with security options app.use(cookieParser()); - - // Trust proxy configuration for reverse proxies if (configService.get("TRUST_PROXY", "false") === "true") { const httpAdapter = app.getHttpAdapter(); diff --git a/apps/bff/src/orders/services/order-builder.service.ts b/apps/bff/src/orders/services/order-builder.service.ts index 485157ce..53a7554b 100644 --- a/apps/bff/src/orders/services/order-builder.service.ts +++ b/apps/bff/src/orders/services/order-builder.service.ts @@ -63,10 +63,7 @@ export class OrderBuilder { orderFields[fields.order.activationStatus] = "Not Started"; } - private addInternetFields( - orderFields: Record, - body: CreateOrderBody - ): void { + private addInternetFields(orderFields: Record, body: CreateOrderBody): void { const fields = getSalesforceFieldMap(); const config = body.configurations || {}; @@ -77,7 +74,7 @@ export class OrderBuilder { // Note: Removed fields that can be derived from OrderItems: // - internetPlanTier: derive from service product metadata - // - installationType: derive from install product name + // - installationType: derive from install product name // - weekendInstall: derive from SKU analysis // - hikariDenwa: derive from SKU analysis } @@ -134,10 +131,7 @@ export class OrderBuilder { } } - private addVpnFields( - orderFields: Record, - body: CreateOrderBody - ): void { + private addVpnFields(orderFields: Record, body: CreateOrderBody): void { // Note: Removed vpnRegion field - can be derived from service product metadata in OrderItems // VPN orders only need user configuration choices (none currently defined) } diff --git a/apps/bff/src/orders/services/order-item-builder.service.ts b/apps/bff/src/orders/services/order-item-builder.service.ts index 839272c0..3be5ea9b 100644 --- a/apps/bff/src/orders/services/order-item-builder.service.ts +++ b/apps/bff/src/orders/services/order-item-builder.service.ts @@ -42,11 +42,14 @@ export class OrderItemBuilder { throw new Error(`PricebookEntry for SKU ${sku} has no UnitPrice set`); } - this.logger.log({ - sku, - pbeId: meta.pbeId, - unitPrice: meta.unitPrice - }, "Creating OrderItem"); + this.logger.log( + { + sku, + pbeId: meta.pbeId, + unitPrice: meta.unitPrice, + }, + "Creating OrderItem" + ); try { // Salesforce requires explicit UnitPrice even with PricebookEntryId @@ -122,7 +125,7 @@ export class OrderItemBuilder { try { this.logger.debug({ sku, pricebookId }, "Querying PricebookEntry for SKU"); - + const res = (await this.sf.query(soql)) as { records?: Array<{ Id?: string; @@ -132,11 +135,14 @@ export class OrderItemBuilder { }>; }; - this.logger.debug({ - sku, - found: !!(res.records?.length), - hasPrice: !!(res.records?.[0] as any)?.UnitPrice - }, "PricebookEntry query result"); + this.logger.debug( + { + sku, + found: !!res.records?.length, + hasPrice: !!(res.records?.[0] as any)?.UnitPrice, + }, + "PricebookEntry query result" + ); const rec = res.records?.[0]; if (!rec?.Id) return null; diff --git a/apps/bff/src/orders/services/order-orchestrator.service.ts b/apps/bff/src/orders/services/order-orchestrator.service.ts index d59ee438..ace6ee46 100644 --- a/apps/bff/src/orders/services/order-orchestrator.service.ts +++ b/apps/bff/src/orders/services/order-orchestrator.service.ts @@ -44,11 +44,7 @@ export class OrderOrchestrator { ); // 2) Build order fields (simplified - no address snapshot for now) - const orderFields = this.orderBuilder.buildOrderFields( - validatedBody, - userMapping, - pricebookId - ); + const orderFields = this.orderBuilder.buildOrderFields(validatedBody, userMapping, pricebookId); this.logger.log({ orderType: orderFields.Type }, "Creating Salesforce Order"); @@ -58,10 +54,13 @@ export class OrderOrchestrator { created = (await this.sf.sobject("Order").create(orderFields)) as { id: string }; this.logger.log({ orderId: created.id }, "Salesforce Order created successfully"); } catch (error) { - this.logger.error({ - error: error instanceof Error ? error.message : String(error), - orderType: orderFields.Type - }, "Failed to create Salesforce Order"); + this.logger.error( + { + error: error instanceof Error ? error.message : String(error), + orderType: orderFields.Type, + }, + "Failed to create Salesforce Order" + ); throw error; } diff --git a/apps/bff/src/orders/services/order-validator.service.ts b/apps/bff/src/orders/services/order-validator.service.ts index f099a679..7e57ab8c 100644 --- a/apps/bff/src/orders/services/order-validator.service.ts +++ b/apps/bff/src/orders/services/order-validator.service.ts @@ -76,11 +76,11 @@ export class OrderValidator { }; this.logger.debug( - { + { orderType: validatedBody.orderType, skuCount: validatedBody.skus.length, - hasConfigurations: !!validatedBody.configurations - }, + hasConfigurations: !!validatedBody.configurations, + }, "Request format validation passed" ); return validatedBody; diff --git a/apps/bff/src/users/users.service.ts b/apps/bff/src/users/users.service.ts index 6a576078..2f47d3f1 100644 --- a/apps/bff/src/users/users.service.ts +++ b/apps/bff/src/users/users.service.ts @@ -567,7 +567,7 @@ export class UsersService { // Get client details from WHMCS const clientDetails = await this.whmcsService.getClientDetails(mapping.whmcsClientId); - + return { company: clientDetails.companyname || null, email: clientDetails.email, diff --git a/apps/portal/src/app/account/billing/page.tsx b/apps/portal/src/app/account/billing/page.tsx index 629f16b0..69778710 100644 --- a/apps/portal/src/app/account/billing/page.tsx +++ b/apps/portal/src/app/account/billing/page.tsx @@ -3,13 +3,13 @@ import { useState, useEffect } from "react"; import { DashboardLayout } from "@/components/layout/dashboard-layout"; import { authenticatedApi } from "@/lib/api"; -import { +import { CreditCardIcon, MapPinIcon, PencilIcon, CheckIcon, XMarkIcon, - ExclamationTriangleIcon + ExclamationTriangleIcon, } from "@heroicons/react/24/outline"; interface Address { @@ -55,19 +55,21 @@ export default function BillingPage() { const handleEdit = () => { setEditing(true); - setEditedAddress(billingInfo?.address || { - street: "", - streetLine2: "", - city: "", - state: "", - postalCode: "", - country: "", - }); + setEditedAddress( + billingInfo?.address || { + street: "", + streetLine2: "", + city: "", + state: "", + postalCode: "", + country: "", + } + ); }; const handleSave = async () => { if (!editedAddress) return; - + try { setSaving(true); // TODO: Implement when WHMCS update is available @@ -91,7 +93,9 @@ export default function BillingPage() {
- Loading billing information... + + Loading billing information... +
@@ -159,12 +163,14 @@ export default function BillingPage() { setEditedAddress(prev => prev ? {...prev, street: e.target.value} : null)} + onChange={e => + setEditedAddress(prev => (prev ? { ...prev, street: e.target.value } : null)) + } className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="123 Main Street" /> - +