From 2b302d1a5fd6aa25fbbe9d0a9dfcf9d0119cd448 Mon Sep 17 00:00:00 2001 From: Erik Tiekstra Date: Fri, 23 May 2025 07:12:29 +0000 Subject: [PATCH] feat(SW-2885): Added support for 'bookingcode' as bookingCode param Approved-by: Michael Zetterberg Approved-by: Christian Andolf --- apps/scandic-web/middleware.ts | 4 +- apps/scandic-web/middlewares/dateFormat.ts | 47 --------------- .../middlewares/legacySearchParams.ts | 58 +++++++++++++++++++ 3 files changed, 60 insertions(+), 49 deletions(-) delete mode 100644 apps/scandic-web/middlewares/dateFormat.ts create mode 100644 apps/scandic-web/middlewares/legacySearchParams.ts diff --git a/apps/scandic-web/middleware.ts b/apps/scandic-web/middleware.ts index cd22e186a..8cffaca06 100644 --- a/apps/scandic-web/middleware.ts +++ b/apps/scandic-web/middleware.ts @@ -9,10 +9,10 @@ import * as cmsContent from "@/middlewares/cmsContent" import * as currentWebLogin from "@/middlewares/currentWebLogin" import * as currentWebLoginEmail from "@/middlewares/currentWebLoginEmail" import * as currentWebLogout from "@/middlewares/currentWebLogout" -import * as dateFormat from "@/middlewares/dateFormat" import * as familyAndFriends from "@/middlewares/familyAndFriends" import * as handleAuth from "@/middlewares/handleAuth" import * as invalidUrl from "@/middlewares/invalidUrl" +import * as legacySearchParams from "@/middlewares/legacySearchParams" import * as myPages from "@/middlewares/myPages" import * as redirect from "@/middlewares/redirect" import * as sasXScandic from "@/middlewares/sasXScandic" @@ -60,7 +60,7 @@ export const middleware: NextMiddleware = async (request, event) => { handleAuth, myPages, webView, - dateFormat, + legacySearchParams, bookingFlow, familyAndFriends, sasXScandic, diff --git a/apps/scandic-web/middlewares/dateFormat.ts b/apps/scandic-web/middlewares/dateFormat.ts deleted file mode 100644 index fc9ab045d..000000000 --- a/apps/scandic-web/middlewares/dateFormat.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { type NextMiddleware, NextResponse } from "next/server" - -import type { MiddlewareMatcher } from "@/types/middleware" - -/* - Middleware function to normalize date formats to support - YYYY-MM-D and YYYY-MM-DD since the current web uses YYYY-MM-D - in the URL as parameters (toDate and fromDate) -*/ -const legacyDatePattern = /^([12]\d{3}-(0[1-9]|1[0-2])-([1-9]))$/ - -function normalizeDate(date: string): string { - const datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/ - if (datePattern.test(date)) { - const [year, month, day] = date.split("-").map(Number) - return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}` - } - return date -} - -export const middleware: NextMiddleware = (request) => { - const url = request.nextUrl.clone() - const { searchParams } = url - - if ( - legacyDatePattern.test(searchParams.get("fromdate")!) || - legacyDatePattern.test(searchParams.get("todate")!) - ) { - const fromDate = searchParams.get("fromdate")! - url.searchParams.set("fromdate", normalizeDate(fromDate)) - - const toDate = searchParams.get("todate")! - url.searchParams.set("todate", normalizeDate(toDate)) - return NextResponse.redirect(url) - } else { - const headers = new Headers(request.headers) - headers.set("x-continue", "1") - return NextResponse.next({ - headers, - }) - } -} - -export const matcher: MiddlewareMatcher = (request) => { - const { searchParams } = request.nextUrl - return searchParams.has("fromdate") || searchParams.has("todate") -} diff --git a/apps/scandic-web/middlewares/legacySearchParams.ts b/apps/scandic-web/middlewares/legacySearchParams.ts new file mode 100644 index 000000000..7849a2a81 --- /dev/null +++ b/apps/scandic-web/middlewares/legacySearchParams.ts @@ -0,0 +1,58 @@ +import { type NextMiddleware, NextResponse } from "next/server" + +import type { MiddlewareMatcher } from "@/types/middleware" + +/* + Middleware function to normalize date formats to support + YYYY-MM-D and YYYY-MM-DD since the current web uses YYYY-MM-D + in the URL as parameters (toDate and fromDate) +*/ +const legacyDatePattern = /^([12]\d{3}-(0[1-9]|1[0-2])-([1-9]))$/ + +function normalizeDate(date: string): string { + const datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/ + if (datePattern.test(date)) { + const [year, month, day] = date.split("-") + return `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}` + } + return date +} + +export const middleware: NextMiddleware = (request) => { + const url = request.nextUrl.clone() + const fromDate = url.searchParams.get("fromdate") + const toDate = url.searchParams.get("todate") + const hasLegacyFromDate = fromDate ? legacyDatePattern.test(fromDate) : false + const hasLegacyToDate = toDate ? legacyDatePattern.test(toDate) : false + const legacyBookingCode = url.searchParams.get("bookingcode") + + const headers = new Headers(request.headers) + + if (!hasLegacyFromDate && !hasLegacyToDate && !legacyBookingCode) { + headers.set("x-continue", "1") + return NextResponse.next({ + headers, + }) + } + + if (legacyBookingCode) { + url.searchParams.delete("bookingcode") + url.searchParams.set("bookingCode", legacyBookingCode) + } + + if (fromDate && hasLegacyFromDate) { + const normalizedFromDate = normalizeDate(fromDate) + url.searchParams.set("fromdate", normalizedFromDate) + } + + if (toDate && hasLegacyToDate) { + const normalizedToDate = normalizeDate(toDate) + url.searchParams.set("todate", normalizedToDate) + } + + return NextResponse.redirect(url) +} + +export const matcher: MiddlewareMatcher = (request) => { + return request.nextUrl.searchParams.size > 0 +}