diff --git a/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts b/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts
index 3b81ddb8a..b9084fb64 100644
--- a/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts
+++ b/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts
@@ -161,6 +161,7 @@ const authenticatedUser: SafeUser = {
phoneNumber: undefined,
profileId: "",
employmentDetails: undefined,
+ promotions: [],
}
const badAuthenticatedUser: SafeUser = {
@@ -193,6 +194,7 @@ const badAuthenticatedUser: SafeUser = {
phoneNumber: undefined,
profileId: "",
employmentDetails: undefined,
+ promotions: [],
}
const loggedOutGuest: Guest = {
diff --git a/packages/trpc/lib/api/endpoints.ts b/packages/trpc/lib/api/endpoints.ts
index 31e0b82b8..00aaf8caa 100644
--- a/packages/trpc/lib/api/endpoints.ts
+++ b/packages/trpc/lib/api/endpoints.ts
@@ -221,6 +221,7 @@ export namespace endpoints {
*/
export namespace Profile {
export const profile = `${base.path.profile}/${version}/${base.enitity.Profile}`
+ export const promoCampaign = `${profile}/Promotion`
export function teamMemberCard(employeeId: string) {
return `${profile}/${employeeId}/TeamMemberCard`
diff --git a/packages/trpc/lib/routers/user/input.ts b/packages/trpc/lib/routers/user/input.ts
index 9c0dae675..5a4da6e1e 100644
--- a/packages/trpc/lib/routers/user/input.ts
+++ b/packages/trpc/lib/routers/user/input.ts
@@ -62,3 +62,7 @@ export const getSavedPaymentCardsInput = z.object({
export type GetSavedPaymentCardsInput = z.input<
typeof getSavedPaymentCardsInput
>
+
+export const addPromoCampaignInput = z.object({
+ promotionId: z.string(),
+})
diff --git a/packages/trpc/lib/routers/user/mutation.ts b/packages/trpc/lib/routers/user/mutation.ts
index f179383b1..36cddff52 100644
--- a/packages/trpc/lib/routers/user/mutation.ts
+++ b/packages/trpc/lib/routers/user/mutation.ts
@@ -9,6 +9,7 @@ import { serverErrorByStatus } from "../../errors"
import { protectedProcedure, serviceProcedure } from "../../procedures"
import {
addCreditCardInput,
+ addPromoCampaignInput,
deleteCreditCardInput,
saveCreditCardInput,
signupInput,
@@ -216,4 +217,48 @@ export const userMutationRouter = router({
redirectUrl: signupVerify[input.language],
}
}),
+ promoCampaign: router({
+ add: protectedProcedure
+ .input(addPromoCampaignInput)
+ .mutation(async function ({ ctx, input }) {
+ userMutationLogger.info("api.user.promoCampaign.add start")
+ const apiResponse = await api.post(
+ api.endpoints.v2.Profile.promoCampaign,
+ {
+ headers: {
+ Authorization: `Bearer ${ctx.session.token.access_token}`,
+ },
+ body: {
+ promotionId: input.promotionId,
+ },
+ }
+ )
+
+ if (!apiResponse.ok) {
+ const text = await apiResponse.text()
+ userMutationLogger.error(
+ "api.user.promoCampaign.add error",
+ JSON.stringify({
+ query: {
+ promotionId: input.promotionId,
+ },
+ error: {
+ status: apiResponse.status,
+ statusText: apiResponse.statusText,
+ text,
+ },
+ })
+ )
+ return false
+ }
+
+ userMutationLogger.info(
+ "api.user.promoCampaign.add success",
+ JSON.stringify({
+ query: { promotionId: input.promotionId },
+ })
+ )
+ return true
+ }),
+ }),
})
diff --git a/packages/trpc/lib/routers/user/output.ts b/packages/trpc/lib/routers/user/output.ts
index 32b6ab2cb..34a7d754b 100644
--- a/packages/trpc/lib/routers/user/output.ts
+++ b/packages/trpc/lib/routers/user/output.ts
@@ -113,6 +113,7 @@ export const getUserSchema = z
.nullable(),
loyalty: userLoyaltySchema.optional(),
employmentDetails: employmentDetailsSchema,
+ promotions: z.array(z.string()).nullish(),
}),
type: z.string(),
}),
diff --git a/packages/trpc/lib/routers/user/utils.ts b/packages/trpc/lib/routers/user/utils.ts
index 50882fdac..b8c98bd8b 100644
--- a/packages/trpc/lib/routers/user/utils.ts
+++ b/packages/trpc/lib/routers/user/utils.ts
@@ -93,8 +93,8 @@ export const getVerifiedUser = cache(
)
return null
}
-
const verifiedData = getUserSchema.safeParse(apiJson)
+
if (!verifiedData.success) {
metricsGetVerifiedUser.validationError(verifiedData.error)
return null
@@ -224,6 +224,7 @@ export function parsedUser(data: User, isMFA: boolean) {
dateOfBirth: data.dateOfBirth,
email: data.email,
employmentDetails: data.employmentDetails,
+ promotions: data.promotions || null,
firstName: data.firstName,
language: data.language,
lastName: data.lastName,
diff --git a/packages/trpc/lib/types/promoCampaignPage.ts b/packages/trpc/lib/types/promoCampaignPage.ts
index c73f26f16..fa43bb7d7 100644
--- a/packages/trpc/lib/types/promoCampaignPage.ts
+++ b/packages/trpc/lib/types/promoCampaignPage.ts
@@ -26,6 +26,7 @@ export interface PromoCampaignPage
export type PromoCampaignPageData = PromoCampaignPage["promo_campaign_page"]
export type PromoHero = NonNullable
+export type PromoCode = NonNullable
/* REFS */
export interface GetPromoCampaignPageRefsData