From acd31725edf1d8c00bc108b600a03a258f439e79 Mon Sep 17 00:00:00 2001 From: paritosh18 Date: Mon, 20 Apr 2026 20:04:35 +0530 Subject: [PATCH] added reason in cancel api --- prisma/schema.prisma | 1 + .../handlers/itinerary/cancelUserItinerary.ts | 7 ++++ .../user/services/itinerary.service.ts | 42 +++++++++---------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index fee840e..b26f263 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1779,6 +1779,7 @@ model ItineraryHeader { toDate DateTime @map("to_date") toTime String @map("to_time") @db.VarChar(30) itineraryStatus String @default("draft") @map("itinerary_status") @db.VarChar(30) + cancellationReason String? @map("cancellation_reason") isActive Boolean @default(true) @map("is_active") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") diff --git a/src/modules/user/handlers/itinerary/cancelUserItinerary.ts b/src/modules/user/handlers/itinerary/cancelUserItinerary.ts index 929dd4a..7c9b3f2 100644 --- a/src/modules/user/handlers/itinerary/cancelUserItinerary.ts +++ b/src/modules/user/handlers/itinerary/cancelUserItinerary.ts @@ -39,14 +39,21 @@ export const handler = safeHandler(async ( body.itineraryHeaderXid !== undefined && body.itineraryHeaderXid !== null ? Number(body.itineraryHeaderXid) : NaN; + const reason = + typeof body.reason === 'string' ? body.reason.trim() : ''; if (!Number.isInteger(itineraryHeaderXid) || itineraryHeaderXid <= 0) { throw new ApiError(400, 'Invalid itineraryHeaderXid.'); } + if (!reason) { + throw new ApiError(400, 'Cancellation reason is required.'); + } + const result = await itineraryService.cancelUserItinerary( userId, itineraryHeaderXid, + reason, ); return { diff --git a/src/modules/user/services/itinerary.service.ts b/src/modules/user/services/itinerary.service.ts index a0e7b0d..3f5aeb2 100644 --- a/src/modules/user/services/itinerary.service.ts +++ b/src/modules/user/services/itinerary.service.ts @@ -2462,7 +2462,11 @@ export class ItineraryService { }; } - async cancelUserItinerary(userXid: number, itineraryHeaderXid: number) { + async cancelUserItinerary( + userXid: number, + itineraryHeaderXid: number, + cancellationReason: string, + ) { return this.prisma.$transaction(async (tx) => { const itinerary = await tx.itineraryHeader.findFirst({ where: { @@ -2638,29 +2642,23 @@ export class ItineraryService { }, }); - const cancelledItinerary = await tx.itineraryHeader.update({ - where: { - id: itineraryHeaderXid, - }, - data: { - isActive: false, - itineraryStatus: 'cancelled', - }, - select: { - id: true, - itineraryNo: true, - title: true, - itineraryStatus: true, - isActive: true, - }, - }); + await tx.$executeRaw` + UPDATE "itn"."itinerary_header" + SET + "is_active" = false, + "itinerary_status" = 'cancelled', + "cancellation_reason" = ${cancellationReason}, + "updated_at" = NOW() + WHERE "id" = ${itineraryHeaderXid} + `; return { - itineraryHeaderXid: cancelledItinerary.id, - itineraryNo: cancelledItinerary.itineraryNo, - title: cancelledItinerary.title, - itineraryStatus: cancelledItinerary.itineraryStatus, - isActive: cancelledItinerary.isActive, + itineraryHeaderXid: itinerary.id, + itineraryNo: itinerary.itineraryNo, + title: itinerary.title, + itineraryStatus: 'cancelled', + cancellationReason, + isActive: false, }; }); }