From c3650f6d5eeb2631a29a169cadcc1dbb99e0aa3b Mon Sep 17 00:00:00 2001 From: user Date: Tue, 21 Oct 2025 15:54:44 +0300 Subject: [PATCH] refactor: more in checkout and ckflow --- apps/frontend/src/lib/core/constants.ts | 2 +- .../checkout/update-price-dialog.svelte | 67 ---- .../src/lib/domains/ckflow/domain/router.ts | 4 +- .../lib/domains/product/product.vm.svelte.ts | 197 ------------ .../domains/product/view/product-form.svelte | 111 ------- .../domains/product/view/product-list.svelte | 288 ------------------ 6 files changed, 3 insertions(+), 666 deletions(-) delete mode 100644 apps/frontend/src/lib/domains/checkout/update-price-dialog.svelte delete mode 100644 apps/frontend/src/lib/domains/product/product.vm.svelte.ts delete mode 100644 apps/frontend/src/lib/domains/product/view/product-form.svelte delete mode 100644 apps/frontend/src/lib/domains/product/view/product-list.svelte diff --git a/apps/frontend/src/lib/core/constants.ts b/apps/frontend/src/lib/core/constants.ts index 546dfa9..890ad4a 100644 --- a/apps/frontend/src/lib/core/constants.ts +++ b/apps/frontend/src/lib/core/constants.ts @@ -1,9 +1,9 @@ import { env } from "$env/dynamic/public"; import IconLinkedInLogo from "~icons/basil/linkedin-outline"; +import PlaneIcon from "~icons/hugeicons/airplane-02"; import IconInstagramLogo from "~icons/mdi/instagram"; import DocumentTextIcon from "~icons/solar/document-linear"; import HomeIcon from "~icons/solar/home-angle-2-linear"; -import PlaneIcon from "~icons/hugeicons/airplane-02"; export const TRANSITION_COLORS = "transition-colors duration-150 ease-in-out"; export const TRANSITION_ALL = "transition-all duration-150 ease-in-out"; diff --git a/apps/frontend/src/lib/domains/checkout/update-price-dialog.svelte b/apps/frontend/src/lib/domains/checkout/update-price-dialog.svelte deleted file mode 100644 index ca2381c..0000000 --- a/apps/frontend/src/lib/domains/checkout/update-price-dialog.svelte +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - The price has changed! - - Ticket prices change throughout the day and, unfortunately, the - price has been changed since last we had checked. You can continue - with the new price or check out alternative trips. - - - -
- New Price - - - {convertAndFormatCurrency( - ckFlowVM.updatedPrices?.displayPrice ?? 0, - )} - -
- - cancelBooking()} - > - Go Back - - onPriceUpdateConfirm()} - > - - - -
-
diff --git a/apps/frontend/src/lib/domains/ckflow/domain/router.ts b/apps/frontend/src/lib/domains/ckflow/domain/router.ts index 0a23a47..2fae990 100644 --- a/apps/frontend/src/lib/domains/ckflow/domain/router.ts +++ b/apps/frontend/src/lib/domains/ckflow/domain/router.ts @@ -1,12 +1,12 @@ import { customerInfoModel, type CustomerInfoModel, -} from "$lib/domains/passengerinfo/data/entities"; +} from "$lib/domains/customerinfo/data"; +import { CheckoutStep } from "$lib/domains/order/data/entities"; import { paymentInfoPayloadModel, type PaymentInfoPayload, } from "$lib/domains/paymentinfo/data/entities"; -import { CheckoutStep } from "$lib/domains/ticket/data/entities"; import { createTRPCRouter, publicProcedure } from "$lib/trpc/t"; import { nanoid } from "nanoid"; import { z } from "zod"; diff --git a/apps/frontend/src/lib/domains/product/product.vm.svelte.ts b/apps/frontend/src/lib/domains/product/product.vm.svelte.ts deleted file mode 100644 index 79d160e..0000000 --- a/apps/frontend/src/lib/domains/product/product.vm.svelte.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { PUBLIC_FRONTEND_URL } from "$lib/core/constants"; -import { trpcApiStore } from "$lib/stores/api"; -import { toast } from "svelte-sonner"; -import { get } from "svelte/store"; -import type { - CreateProductPayload, - ProductModel, - UpdateProductPayload, -} from "./data"; - -export class ProductViewModel { - products = $state([]); - loading = $state(false); - formLoading = $state(false); - - // Selected product for edit/delete operations - selectedProduct = $state(null); - - async fetchProducts() { - const api = get(trpcApiStore); - if (!api) { - return toast.error("API client not initialized"); - } - - this.loading = true; - try { - const result = await api.product.getAllProducts.query(); - if (result.error) { - toast.error(result.error.message, { - description: result.error.userHint, - }); - return false; - } - - this.products = result.data || []; - return true; - } catch (e) { - console.error(e); - toast.error("Failed to fetch products", { - description: "Please try again later", - }); - return false; - } finally { - this.loading = false; - } - } - - async createProduct(payload: CreateProductPayload) { - const api = get(trpcApiStore); - if (!api) { - return toast.error("API client not initialized"); - } - - this.formLoading = true; - try { - const result = await api.product.createProduct.mutate(payload); - if (result.error) { - toast.error(result.error.message, { - description: result.error.userHint, - }); - return false; - } - - toast.success("Product created successfully"); - await this.fetchProducts(); - return true; - } catch (e) { - toast.error("Failed to create product", { - description: "Please try again later", - }); - return false; - } finally { - this.formLoading = false; - } - } - - async updateProduct(payload: UpdateProductPayload) { - const api = get(trpcApiStore); - if (!api) { - return toast.error("API client not initialized"); - } - - this.formLoading = true; - try { - const result = await api.product.updateProduct.mutate(payload); - if (result.error) { - toast.error(result.error.message, { - description: result.error.userHint, - }); - return false; - } - - toast.success("Product updated successfully"); - await this.fetchProducts(); - return true; - } catch (e) { - toast.error("Failed to update product", { - description: "Please try again later", - }); - return false; - } finally { - this.formLoading = false; - this.selectedProduct = null; - } - } - - async deleteProduct(id: number) { - const api = get(trpcApiStore); - if (!api) { - return toast.error("API client not initialized"); - } - - this.formLoading = true; - try { - const result = await api.product.deleteProduct.mutate({ id }); - if (result.error) { - toast.error(result.error.message, { - description: result.error.userHint, - }); - return false; - } - - toast.success("Product deleted successfully"); - await this.fetchProducts(); - return true; - } catch (e) { - toast.error("Failed to delete product", { - description: "Please try again later", - }); - return false; - } finally { - this.formLoading = false; - this.selectedProduct = null; - } - } - - async refreshProductLinkId(id: number) { - const api = get(trpcApiStore); - if (!api) { - return toast.error("API client not initialized"); - } - - try { - const result = await api.product.refreshProductLinkId.mutate({ id }); - if (result.error) { - toast.error(result.error.message, { - description: result.error.userHint, - }); - return null; - } - - toast.success("Link ID refreshed successfully"); - await this.fetchProducts(); - return result.data; - } catch (e) { - toast.error("Failed to refresh link ID", { - description: "Please try again later", - }); - return null; - } - } - - selectProduct(product: ProductModel) { - this.selectedProduct = { ...product }; - } - - clearSelectedProduct() { - this.selectedProduct = null; - } - - getDefaultProduct(): CreateProductPayload { - return { - title: "", - description: "", - longDescription: "", - price: 0, - discountPrice: 0, - }; - } - - async copyLinkToClipboard(linkId: string) { - try { - await navigator.clipboard.writeText( - `${PUBLIC_FRONTEND_URL}/${linkId}`, - ); - toast.success("Frontend link copied to clipboard"); - return true; - } catch (e) { - toast.error("Failed to copy link ID", { - description: "Please try copying manually", - }); - return false; - } - } -} - -export const productVM = new ProductViewModel(); diff --git a/apps/frontend/src/lib/domains/product/view/product-form.svelte b/apps/frontend/src/lib/domains/product/view/product-form.svelte deleted file mode 100644 index baefcd7..0000000 --- a/apps/frontend/src/lib/domains/product/view/product-form.svelte +++ /dev/null @@ -1,111 +0,0 @@ - - -
- -
- - -
- - -
- -