added reason in cancel api

This commit is contained in:
paritosh18
2026-04-20 20:04:35 +05:30
parent 0d96b1e67e
commit acd31725ed
3 changed files with 28 additions and 22 deletions

View File

@@ -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")

View File

@@ -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 {

View File

@@ -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,
};
});
}