Merged in feat/SW-1676-modify-contact-details-my-stay-anonymous (pull request #1468)

Feat/SW-1676 modify contact details my stay anonymous

* feat(SW-1676): Modify guest details step 1

* feat(SW-1676) Integration to api to update guest details

* feat(SW-1676) Reuse of old modal

* feat(SW-1676) updated modify guest

* feat(SW-1676) cleanup

* feat(SW-1676) updated myStayReturnRoute to sessionStorage


Approved-by: Niclas Edenvin
This commit is contained in:
Pontus Dreij
2025-03-07 13:41:25 +00:00
parent 2c7d72c540
commit 2509794d0c
33 changed files with 528 additions and 251 deletions

View File

@@ -120,6 +120,19 @@ export const createRefIdInput = z.object({
lastName: z.string().trim().max(250).min(1),
})
export const updateBookingInput = z.object({
confirmationNumber: z.string(),
checkInDate: z.string().optional(),
checkOutDate: z.string().optional(),
guest: z
.object({
email: z.string().optional(),
phoneNumber: z.string().optional(),
countryCode: z.string().optional(),
})
.optional(),
})
// Query
const confirmationNumberInput = z.object({
confirmationNumber: z.string(),

View File

@@ -11,6 +11,7 @@ import {
cancelBookingInput,
createBookingInput,
priceChangeInput,
updateBookingInput,
removePackageInput,
} from "./input"
import { createBookingSchema } from "./output"
@@ -49,6 +50,14 @@ const addPackageFailCounter = meter.createCounter(
"trpc.bookings.add-package-fail"
)
const updateGuestCounter = meter.createCounter("trpc.bookings.update-guest")
const updateGuestSuccessCounter = meter.createCounter(
"trpc.bookings.update-guest-success"
)
const updateGuestFailCounter = meter.createCounter(
"trpc.bookings.update-guest-fail"
)
const removePackageCounter = meter.createCounter("trpc.bookings.remove-package")
const removePackageSuccessCounter = meter.createCounter(
"trpc.bookings.remove-package-success"
@@ -386,6 +395,70 @@ export const bookingMutationRouter = router({
addPackageSuccessCounter.add(1, { confirmationNumber })
return verifiedData.data
}),
update: safeProtectedServiceProcedure
.input(updateBookingInput)
.mutation(async function ({ ctx, input }) {
const accessToken = ctx.serviceToken
const { confirmationNumber, ...body } = input
updateGuestCounter.add(1, { confirmationNumber })
const headers = {
Authorization: `Bearer ${accessToken}`,
}
const apiResponse = await api.put(
api.endpoints.v1.Booking.booking(confirmationNumber),
{
headers,
body: body,
}
)
if (!apiResponse.ok) {
const text = await apiResponse.text()
updateGuestFailCounter.add(1, {
confirmationNumber,
error_type: "http_error",
error: JSON.stringify({
status: apiResponse.status,
}),
})
console.error(
"api.booking.updateGuest error",
JSON.stringify({
query: { confirmationNumber },
error: {
status: apiResponse.status,
statusText: apiResponse.statusText,
error: text,
},
})
)
return null
}
const apiJson = await apiResponse.json()
const verifiedData = createBookingSchema.safeParse(apiJson)
if (!verifiedData.success) {
updateGuestFailCounter.add(1, {
confirmationNumber,
error_type: "validation_error",
})
console.error(
"api.booking.updateGuest validation error",
JSON.stringify({
query: { confirmationNumber },
error: verifiedData.error,
})
)
return null
}
updateGuestSuccessCounter.add(1, { confirmationNumber })
return verifiedData.data
}),
removePackage: safeProtectedServiceProcedure

View File

@@ -77,6 +77,7 @@ const guestSchema = z.object({
lastName: z.string().nullable().default(""),
membershipNumber: z.string().nullable().default(""),
phoneNumber: phoneValidator().nullable().default(""),
countryCode: z.string().nullable().default(""),
})
export const packageSchema = z