From 49abd1246b76b4bb8fe2e00d61f6b7cce7bb637b Mon Sep 17 00:00:00 2001 From: user Date: Tue, 21 Oct 2025 16:21:26 +0300 Subject: [PATCH] cleanup: ckflow, order, checkout page --- .../src/lib/domains/checkout/sid.store.ts | 4 ++ .../src/lib/domains/ckflow/data/repository.ts | 2 +- .../domains/ckflow/view/ckflow.vm.svelte.ts | 18 +++++---- .../src/lib/domains/order/domain/router.ts | 2 +- .../view/create/create.order.vm.svelte.ts | 19 ++++----- .../src/routes/(main)/[pageid]/+page.svelte | 40 ++++++++++++++----- .../(main)/checkout/[sid]/[tid]/+page.svelte | 19 ++++----- 7 files changed, 62 insertions(+), 42 deletions(-) create mode 100644 apps/frontend/src/lib/domains/checkout/sid.store.ts diff --git a/apps/frontend/src/lib/domains/checkout/sid.store.ts b/apps/frontend/src/lib/domains/checkout/sid.store.ts new file mode 100644 index 0000000..a592de0 --- /dev/null +++ b/apps/frontend/src/lib/domains/checkout/sid.store.ts @@ -0,0 +1,4 @@ +import { nanoid } from "nanoid/non-secure"; +import { writable } from "svelte/store"; + +export const checkoutSessionIdStore = writable(nanoid()); diff --git a/apps/frontend/src/lib/domains/ckflow/data/repository.ts b/apps/frontend/src/lib/domains/ckflow/data/repository.ts index b38bb3d..8ddbef7 100644 --- a/apps/frontend/src/lib/domains/ckflow/data/repository.ts +++ b/apps/frontend/src/lib/domains/ckflow/data/repository.ts @@ -435,7 +435,7 @@ export class CheckoutFlowRepository { .where(eq(checkoutFlowSession.flowId, flowId)) .execute(); - // If shadow passenger info is provided, sync it + // If shadow info is provided, sync it if (payload.personalInfo) { await this.syncPersonalInfo(flowId, payload.personalInfo); } diff --git a/apps/frontend/src/lib/domains/ckflow/view/ckflow.vm.svelte.ts b/apps/frontend/src/lib/domains/ckflow/view/ckflow.vm.svelte.ts index aa24c03..7fe9e78 100644 --- a/apps/frontend/src/lib/domains/ckflow/view/ckflow.vm.svelte.ts +++ b/apps/frontend/src/lib/domains/ckflow/view/ckflow.vm.svelte.ts @@ -10,12 +10,12 @@ import { type PendingActions, } from "$lib/domains/ckflow/data/entities"; import type { CustomerInfoModel } from "$lib/domains/customerinfo/data"; +import { customerInfoModel } from "$lib/domains/customerinfo/data"; +import { customerInfoVM } from "$lib/domains/customerinfo/view/customerinfo.vm.svelte"; import { CheckoutStep, type OrderPriceDetailsModel, } from "$lib/domains/order/data/entities"; -import { customerInfoModel } from "$lib/domains/passengerinfo/data/entities"; -import { passengerInfoVM } from "$lib/domains/passengerinfo/view/passenger.info.vm.svelte"; import type { PaymentInfoPayload } from "$lib/domains/paymentinfo/data/entities"; import { PaymentMethod } from "$lib/domains/paymentinfo/data/entities"; import { productStore } from "$lib/domains/product/store"; @@ -529,17 +529,19 @@ export class CKFlowViewModel { return; } - // Get primary passenger's PII - const primaryPassengerInfo = - passengerInfoVM.passengerInfos.length > 0 - ? passengerInfoVM.passengerInfos[0].passengerPii - : undefined; + const personalInfo = customerInfoVM.customerInfo; + if (!personalInfo) { + toast.error("Could not find customer info", { + description: "Please try again later or contact support", + }); + return; + } const out = await api.ckflow.executePrePaymentStep.mutate({ flowId: this.flowId!, payload: { initialUrl: "", - personalInfo: primaryPassengerInfo, + personalInfo: personalInfo, }, }); diff --git a/apps/frontend/src/lib/domains/order/domain/router.ts b/apps/frontend/src/lib/domains/order/domain/router.ts index f4ae0e9..3c40f6d 100644 --- a/apps/frontend/src/lib/domains/order/domain/router.ts +++ b/apps/frontend/src/lib/domains/order/domain/router.ts @@ -61,7 +61,7 @@ export const orderRouter = createTRPCRouter({ return { error: out.error }; } - Logger.info(`Creating passenger infos with oid: ${out.data}`); + Logger.info(`Creating customer infos with oid: ${out.data}`); const pOut = await pc.createPassengerInfos( input.passengerInfos, out.data.id, diff --git a/apps/frontend/src/lib/domains/order/view/create/create.order.vm.svelte.ts b/apps/frontend/src/lib/domains/order/view/create/create.order.vm.svelte.ts index 1b6ee04..061726d 100644 --- a/apps/frontend/src/lib/domains/order/view/create/create.order.vm.svelte.ts +++ b/apps/frontend/src/lib/domains/order/view/create/create.order.vm.svelte.ts @@ -1,26 +1,20 @@ +import { billingDetailsVM } from "$lib/domains/checkout/payment-info-section/billing.details.vm.svelte"; import { ckFlowVM } from "$lib/domains/ckflow/view/ckflow.vm.svelte"; +import { customerInfoVM } from "$lib/domains/customerinfo/view/customerinfo.vm.svelte"; import { createOrderPayloadModel, OrderCreationStep, } from "$lib/domains/order/data/entities"; -import { passengerInfoVM } from "$lib/domains/passengerinfo/view/passenger.info.vm.svelte"; -import type { FlightTicket } from "$lib/domains/ticket/data/entities"; +import { productStore } from "$lib/domains/product/store"; import { trpcApiStore } from "$lib/stores/api"; -import type { EmailAccountPayload } from "@pkg/logic/domains/account/data/entities"; import { toast } from "svelte-sonner"; import { get } from "svelte/store"; export class CreateOrderViewModel { orderStep = $state(OrderCreationStep.ACCOUNT_SELECTION); - accountInfo = $state({ email: "", password: "" }); - accountInfoOk = $state(false); - passengerInfosOk = $state(false); - ticketInfo = $state(undefined); - ticketInfoOk = $state(false); - loading = $state(true); setStep(step: OrderCreationStep) { @@ -74,6 +68,10 @@ export class CreateOrderViewModel { } const parsed = createOrderPayloadModel.safeParse({ + product: get(productStore), + productId: get(productStore)?.id, + customerInfo: customerInfoVM.customerInfo, + paymentInfo: billingDetailsVM.billingDetails, orderModel: { basePrice, displayPrice, @@ -81,9 +79,6 @@ export class CreateOrderViewModel { flightTicketInfoId: 0, emailAccountId: 0, }, - emailAccountInfo: this.accountInfo, - flightTicketInfo: this.ticketInfo!, - passengerInfos: passengerInfoVM.passengerInfos, flowId: ckFlowVM.flowId, }); if (parsed.error) { diff --git a/apps/frontend/src/routes/(main)/[pageid]/+page.svelte b/apps/frontend/src/routes/(main)/[pageid]/+page.svelte index e05eb36..50f418a 100644 --- a/apps/frontend/src/routes/(main)/[pageid]/+page.svelte +++ b/apps/frontend/src/routes/(main)/[pageid]/+page.svelte @@ -1,4 +1,6 @@ -{#if data.data} - - Either show the user the product as being valid and redirecting them to - the checkout - -{:else} - Show the user an error around "page not found" or "expired link" -{/if} +
+ {#if data.data} + {data.data.title} +

{data.data.description}

+ + Either show the user the product as being valid and redirecting them + to the checkout + + {:else} + Show the user an error around "page not found" or "expired link" + {/if} +
diff --git a/apps/frontend/src/routes/(main)/checkout/[sid]/[tid]/+page.svelte b/apps/frontend/src/routes/(main)/checkout/[sid]/[tid]/+page.svelte index b1a7d84..630533e 100644 --- a/apps/frontend/src/routes/(main)/checkout/[sid]/[tid]/+page.svelte +++ b/apps/frontend/src/routes/(main)/checkout/[sid]/[tid]/+page.svelte @@ -3,18 +3,17 @@ import Title from "$lib/components/atoms/title.svelte"; import MaxWidthWrapper from "$lib/components/molecules/max-width-wrapper.svelte"; import Button from "$lib/components/ui/button/button.svelte"; + import CheckoutConfirmationSection from "$lib/domains/checkout/checkout-confirmation-section.svelte"; + import CheckoutLoadingSection from "$lib/domains/checkout/checkout-loading-section.svelte"; + import CheckoutStepsIndicator from "$lib/domains/checkout/checkout-steps-indicator.svelte"; + import { checkoutVM } from "$lib/domains/checkout/checkout.vm.svelte"; + import InitialInfoSection from "$lib/domains/checkout/initial-info-section.svelte"; + import PaymentInfoSection from "$lib/domains/checkout/payment-info-section/index.svelte"; + import PaymentSummary from "$lib/domains/checkout/payment-summary.svelte"; + import PaymentVerificationSection from "$lib/domains/checkout/payment-verification-section.svelte"; import { ckFlowVM } from "$lib/domains/ckflow/view/ckflow.vm.svelte"; import { CheckoutStep } from "$lib/domains/order/data/entities"; import { flightTicketStore } from "$lib/domains/ticket/data/store"; - import CheckoutConfirmationSection from "$lib/domains/ticket/view/checkout/checkout-confirmation-section.svelte"; - import CheckoutLoadingSection from "$lib/domains/ticket/view/checkout/checkout-loading-section.svelte"; - import CheckoutStepsIndicator from "$lib/domains/ticket/view/checkout/checkout-steps-indicator.svelte"; - import { checkoutVM } from "$lib/domains/ticket/view/checkout/checkout.vm.svelte"; - import InitialInfoSection from "$lib/domains/ticket/view/checkout/initial-info-section.svelte"; - import PaymentInfoSection from "$lib/domains/ticket/view/checkout/payment-info-section/index.svelte"; - import PaymentSummary from "$lib/domains/ticket/view/checkout/payment-summary.svelte"; - import PaymentVerificationSection from "$lib/domains/ticket/view/checkout/payment-verification-section.svelte"; - import UpdatePriceDialog from "$lib/domains/ticket/view/checkout/update-price-dialog.svelte"; import { onDestroy, onMount } from "svelte"; import { toast } from "svelte-sonner"; import SearchIcon from "~icons/solar/magnifer-linear"; @@ -46,8 +45,6 @@ }); - -
{#if !pageData.data || !!pageData.error}