🔄 cleanup: order with 3 key relations, and ckflow now upto speeded

This commit is contained in:
user
2025-10-20 22:27:06 +03:00
parent 2ed74c267d
commit 10bcbf982a
28 changed files with 190 additions and 1360 deletions

View File

@@ -1,5 +1,8 @@
import { and, eq, type Database, isNotNull, or } from "@pkg/db";
import { ERROR_CODES, type Result } from "$lib/core/data.types";
import { and, eq, isNotNull, or, type Database } from "@pkg/db";
import { order, passengerInfo } from "@pkg/db/schema";
import { getError, Logger } from "@pkg/logger";
import { nanoid } from "nanoid";
import {
fullOrderModel,
limitedOrderWithTicketInfoModel,
@@ -8,9 +11,6 @@ import {
type LimitedOrderWithTicketInfoModel,
type NewOrderModel,
} from "./entities";
import { getError, Logger } from "@pkg/logger";
import { order, passengerInfo } from "@pkg/db/schema";
import { nanoid } from "nanoid";
export class OrderRepository {
private db: Database;
@@ -122,7 +122,7 @@ export class OrderRepository {
discountAmount: payload.discountAmount.toFixed(3),
flightTicketInfoId: payload.flightTicketInfoId,
paymentDetailsId: payload.paymentDetailsId,
paymentInfoId: payload.paymentInfoId,
status: OrderStatus.PENDING_FULLFILLMENT,
pnr,

View File

@@ -1,20 +1,20 @@
import { SessionOutcome } from "$lib/domains/ckflow/data/entities";
import { getCKUseCases } from "$lib/domains/ckflow/domain/usecases";
import { EmailerUseCases } from "$lib/domains/email/domain/usecases";
import { createOrderPayloadModel } from "$lib/domains/order/data/entities";
import { PassengerInfoRepository } from "$lib/domains/passengerinfo/data/repository";
import { PassengerInfoController } from "$lib/domains/passengerinfo/domain/controller";
import { PaymentInfoRepository } from "$lib/domains/paymentinfo/data/repository";
import { PaymentInfoUseCases } from "$lib/domains/paymentinfo/domain/usecases";
import { CheckoutStep } from "$lib/domains/ticket/data/entities";
import { getTC } from "$lib/domains/ticket/domain/controller";
import { createTRPCRouter, publicProcedure } from "$lib/trpc/t";
import { db } from "@pkg/db";
import { OrderRepository } from "../data/repository";
import { OrderController } from "./controller";
import { getTC } from "$lib/domains/ticket/domain/controller";
import { getError, Logger } from "@pkg/logger";
import { PassengerInfoController } from "$lib/domains/passengerinfo/domain/controller";
import { PassengerInfoRepository } from "$lib/domains/passengerinfo/data/repository";
import { PaymentInfoUseCases } from "$lib/domains/paymentinfo/domain/usecases";
import { PaymentInfoRepository } from "$lib/domains/paymentinfo/data/repository";
import { ERROR_CODES } from "@pkg/result";
import { z } from "zod";
import { getCKUseCases } from "$lib/domains/ckflow/domain/usecases";
import { SessionOutcome } from "$lib/domains/ckflow/data/entities";
import { CheckoutStep } from "$lib/domains/ticket/data/entities";
import { EmailerUseCases } from "$lib/domains/email/domain/usecases";
import { OrderRepository } from "../data/repository";
import { OrderController } from "./controller";
export const orderRouter = createTRPCRouter({
createOrder: publicProcedure
@@ -33,7 +33,7 @@ export const orderRouter = createTRPCRouter({
return { error: ftRes.error };
}
if (!input.flightTicketId || !input.paymentDetails) {
if (!input.flightTicketId || !input.paymentInfo) {
return {
error: getError({
code: ERROR_CODES.INPUT_ERROR,
@@ -43,7 +43,7 @@ export const orderRouter = createTRPCRouter({
}),
};
}
const pdRes = await pduc.createPaymentInfo(input.paymentDetails!);
const pdRes = await pduc.createPaymentInfo(input.paymentInfo!);
if (pdRes.error || !pdRes.data) {
return { error: pdRes.error };
}
@@ -52,7 +52,7 @@ export const orderRouter = createTRPCRouter({
input.orderModel.flightTicketInfoId = ftRes.data;
Logger.info(`Setting payment details id ${pdRes.data}`);
input.orderModel.paymentDetailsId = pdRes.data;
input.orderModel.paymentInfoId = pdRes.data;
Logger.info("Creating order");
const out = await oc.createOrder(input.orderModel);

View File

@@ -82,7 +82,7 @@ export class PassengerInfoRepository {
.values({
passengerType: payload.passengerType,
passengerPiiId: payload.passengerPiiId,
paymentDetailsId: payload.paymentDetailsId,
paymentInfoId: payload.paymentInfoId,
seatSelection: payload.seatSelection,
bagSelection: payload.bagSelection,
agentsInfo: payload.agentsInfo,

View File

@@ -1,7 +1,7 @@
import { Logger } from "@pkg/logger";
import type { Result } from "@pkg/result";
import type { PassengerInfo } from "../data/entities";
import type { PassengerInfoRepository } from "../data/repository";
import { Logger } from "@pkg/logger";
export class PassengerInfoController {
repo: PassengerInfoRepository;
@@ -14,7 +14,7 @@ export class PassengerInfoController {
payload: PassengerInfo[],
orderId: number,
flightTicketInfoId?: number,
paymentDetailsId?: number,
paymentInfoId?: number,
): Promise<Result<number>> {
const made = [] as number[];
for (const passengerInfo of payload) {
@@ -26,7 +26,7 @@ export class PassengerInfoController {
return piiOut;
}
passengerInfo.passengerPiiId = piiOut.data;
passengerInfo.paymentDetailsId = paymentDetailsId;
passengerInfo.paymentInfoId = paymentInfoId;
passengerInfo.flightTicketInfoId = flightTicketInfoId;
passengerInfo.orderId = orderId;
passengerInfo.agentId = undefined;

View File

@@ -1,12 +1,12 @@
import { eq, type Database } from "@pkg/db";
import { paymentInfo } from "@pkg/db/schema";
import { Logger } from "@pkg/logger";
import type { Result } from "@pkg/result";
import {
paymentDetailsModel,
type PaymentDetails,
type PaymentDetailsPayload,
} from "./entities";
import type { Result } from "@pkg/result";
import { paymentDetails } from "@pkg/db/schema";
import { Logger } from "@pkg/logger";
export class PaymentInfoRepository {
db: Database;
@@ -18,7 +18,7 @@ export class PaymentInfoRepository {
data: PaymentDetailsPayload,
): Promise<Result<number>> {
const out = await this.db
.insert(paymentDetails)
.insert(paymentInfo)
.values({
cardNumber: data.cardDetails.cardNumber,
cardholderName: data.cardDetails.cardholderName,
@@ -29,15 +29,15 @@ export class PaymentInfoRepository {
createdAt: new Date(),
updatedAt: new Date(),
})
.returning({ id: paymentDetails.id })
.returning({ id: paymentInfo.id })
.execute();
return { data: out[0]?.id };
}
async getPaymentInfo(id: number): Promise<Result<PaymentDetails>> {
Logger.info(`Getting payment info with id ${id}`);
const out = await this.db.query.paymentDetails.findFirst({
where: eq(paymentDetails.id, id),
const out = await this.db.query.paymentInfo.findFirst({
where: eq(paymentInfo.id, id),
});
const parsed = paymentDetailsModel.safeParse(out);
if (parsed.error) {
@@ -50,8 +50,8 @@ export class PaymentInfoRepository {
async deletePaymentInfo(id: number): Promise<Result<boolean>> {
Logger.info(`Deleting payment info with id ${id}`);
const out = await this.db
.delete(paymentDetails)
.where(eq(paymentDetails.id, id))
.delete(paymentInfo)
.where(eq(paymentInfo.id, id))
.execute();
Logger.debug(out);
return { data: true };

View File

@@ -1,17 +1,17 @@
import { get } from "svelte/store";
import { CheckoutStep } from "../../data/entities/index";
import { trpcApiStore } from "$lib/stores/api";
import { toast } from "svelte-sonner";
import { flightTicketStore } from "../../data/store";
import { ckFlowVM } from "$lib/domains/ckflow/view/ckflow.vm.svelte";
import { newOrderModel } from "$lib/domains/order/data/entities";
import { passengerInfoVM } from "$lib/domains/passengerinfo/view/passenger.info.vm.svelte";
import { paymentInfoVM } from "./payment-info-section/payment.info.vm.svelte";
import {
paymentDetailsPayloadModel,
PaymentMethod,
} from "$lib/domains/paymentinfo/data/entities";
import { trpcApiStore } from "$lib/stores/api";
import { toast } from "svelte-sonner";
import { get } from "svelte/store";
import { CheckoutStep } from "../../data/entities/index";
import { flightTicketStore } from "../../data/store";
import { paymentInfoVM } from "./payment-info-section/payment.info.vm.svelte";
import { calculateTicketPrices } from "./total.calculator";
import { ckFlowVM } from "$lib/domains/ckflow/view/ckflow.vm.svelte";
class TicketCheckoutViewModel {
checkoutStep = $state(CheckoutStep.Initial);
@@ -93,7 +93,7 @@ class TicketCheckoutViewModel {
fullfilledPrice: validatedPrices.finalTotal, // Same as displayPrice
pricePerPassenger: validatedPrices.pricePerPassenger,
flightTicketInfoId: -1,
paymentDetailsId: -1,
paymentInfoId: -1,
});
if (parsed.error) {
@@ -126,7 +126,7 @@ class TicketCheckoutViewModel {
flightTicketId: ticket.id,
orderModel: parsed.data,
passengerInfos: passengerInfoVM.passengerInfos,
paymentDetails: pInfoParsed.data,
paymentInfo: pInfoParsed.data,
refOIds: ticket.refOIds,
flowId: ckFlowVM.flowId,
});