🔄 cleanup: order with 3 key relations, and ckflow now upto speeded
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user