diff --git a/apps/scandic-web/i18n/dictionaries/da.json b/apps/scandic-web/i18n/dictionaries/da.json index 8639a8a2a..968033c88 100644 --- a/apps/scandic-web/i18n/dictionaries/da.json +++ b/apps/scandic-web/i18n/dictionaries/da.json @@ -89,8 +89,8 @@ "Booking code": "Bookingkode", "Booking confirmation": "Booking bekræftelse", "Booking number": "Bookingnummer", - "Booking number {value}": "Booking number {value}", "Booking number is required": "Bookingnummer er påkrævet", + "Booking number {value}": "Booking number {value}", "Booking policy": "Booking politik", "Booking summary": "Opsummering", "Breakfast": "Morgenmad", @@ -477,8 +477,8 @@ "Password": "Adgangskode", "Pay later": "Betal senere", "Pay now": "Betal nu", - "Pay with Card": "Pay with Card", "Pay the member price of {amount} for Room {roomNr}": "Betal medlemsprisen på {amount} til værelse {roomNr}", + "Pay with Card": "Pay with Card", "Pay with card": "Betal med kort", "Pay with points": "Betal med point", "Payment": "Betaling", diff --git a/apps/scandic-web/i18n/dictionaries/de.json b/apps/scandic-web/i18n/dictionaries/de.json index 5b47d02fe..ac44afab5 100644 --- a/apps/scandic-web/i18n/dictionaries/de.json +++ b/apps/scandic-web/i18n/dictionaries/de.json @@ -90,8 +90,8 @@ "Booking code": "Buchungscode", "Booking confirmation": "Buchungsbestätigung", "Booking number": "Buchungsnummer", - "Booking number {value}": "Booking number {value}", "Booking number is required": "Buchungsnummer ist erforderlich", + "Booking number {value}": "Booking number {value}", "Booking policy": "Buchungsbedingungen", "Booking summary": "Zusammenfassung", "Breakfast": "Frühstück", diff --git a/apps/scandic-web/i18n/dictionaries/en.json b/apps/scandic-web/i18n/dictionaries/en.json index 306f51ec4..94bf2ecf7 100644 --- a/apps/scandic-web/i18n/dictionaries/en.json +++ b/apps/scandic-web/i18n/dictionaries/en.json @@ -88,8 +88,8 @@ "Booking code": "Booking code", "Booking confirmation": "Booking confirmation", "Booking number": "Booking number", - "Booking number {value}": "Booking number {value}", "Booking number is required": "Booking number is required", + "Booking number {value}": "Booking number {value}", "Booking policy": "Booking policy", "Booking summary": "Booking summary", "Breakfast": "Breakfast", diff --git a/apps/scandic-web/i18n/dictionaries/fi.json b/apps/scandic-web/i18n/dictionaries/fi.json index a6d00a1cd..cf7e54cc7 100644 --- a/apps/scandic-web/i18n/dictionaries/fi.json +++ b/apps/scandic-web/i18n/dictionaries/fi.json @@ -88,8 +88,8 @@ "Booking code": "Varauskoodi", "Booking confirmation": "Varausvahvistus", "Booking number": "Varausnumero", - "Booking number {value}": "Booking number {value}", "Booking number is required": "Varausnumero vaaditaan", + "Booking number {value}": "Booking number {value}", "Booking policy": "Varauskäytäntö", "Booking summary": "Yhteenveto", "Breakfast": "Aamiainen", diff --git a/apps/scandic-web/i18n/dictionaries/no.json b/apps/scandic-web/i18n/dictionaries/no.json index 2128785f8..0d04bad6a 100644 --- a/apps/scandic-web/i18n/dictionaries/no.json +++ b/apps/scandic-web/i18n/dictionaries/no.json @@ -88,8 +88,8 @@ "Booking code": "Bestillingskode", "Booking confirmation": "Bestillingsbekreftelse", "Booking number": "Bestillingsnummer", - "Booking number {value}": "Booking number {value}", "Booking number is required": "Bookingnummer er påkrevd", + "Booking number {value}": "Booking number {value}", "Booking policy": "Bestillingsbetingelser", "Booking summary": "Sammendrag", "Breakfast": "Frokost", @@ -475,9 +475,9 @@ "Password": "Passord", "Pay later": "Betal senere", "Pay now": "Betal nå", + "Pay the member price of {amount} for Room {roomNr}": "Betal medlemsprisen på {amount} for rom {roomNr}", "Pay with Card": "Pay with Card", "Pay with points": "Pay with points", - "Pay the member price of {amount} for Room {roomNr}": "Betal medlemsprisen på {amount} for rom {roomNr}", "Payment": "Betaling", "Payment Guarantee": "Garantera betalning", "Payment details": "Payment details", diff --git a/apps/scandic-web/i18n/dictionaries/sv.json b/apps/scandic-web/i18n/dictionaries/sv.json index 5c21d2444..ecff7a787 100644 --- a/apps/scandic-web/i18n/dictionaries/sv.json +++ b/apps/scandic-web/i18n/dictionaries/sv.json @@ -88,8 +88,8 @@ "Booking code": "Bokningskod", "Booking confirmation": "Bokningsbekräftelse", "Booking number": "Bokningsnummer", - "Booking number {value}": "Booking number {value}", "Booking number is required": "Bokningsnummer krävs", + "Booking number {value}": "Booking number {value}", "Booking policy": "Bokningsvillkor", "Booking summary": "Sammanfattning", "Breakfast": "Frukost", @@ -475,9 +475,9 @@ "Password": "Lösenord", "Pay later": "Betala senare", "Pay now": "Betala nu", + "Pay the member price of {amount} for Room {roomNr}": "Betala medlemspriset på {amount} för rum {roomNr}", "Pay with Card": "Pay with Card", "Pay with points": "Pay with points", - "Pay the member price of {amount} for Room {roomNr}": "Betala medlemspriset på {amount} för rum {roomNr}", "Payment": "Betalning", "Payment Guarantee": "Garantera betalning", "Payment details": "Payment details", diff --git a/apps/scandic-web/server/routers/user/output.ts b/apps/scandic-web/server/routers/user/output.ts index 24d9eb3fb..07636b899 100644 --- a/apps/scandic-web/server/routers/user/output.ts +++ b/apps/scandic-web/server/routers/user/output.ts @@ -2,17 +2,14 @@ import { z } from "zod" import { countriesMap } from "@/constants/countries" -import { getMembership } from "@/utils/user" +import { getMembership, scandicMemberships } from "@/utils/user" import { imageSchema } from "../hotels/schemas/image" -export const membershipSchema = z.object({ - currentPoints: z.number(), - expirationDate: z.string(), - membershipNumber: z.string(), +const commonMembershipSchema = z.object({ + currentPoints: z.number().optional(), + expirationDate: z.string().optional(), membershipLevel: z.string().optional(), - memberSince: z.string(), - membershipType: z.string(), nextLevel: z.string().optional(), nightsToTopTier: z.number().optional(), pointsExpiryDate: z.string().optional(), @@ -21,6 +18,34 @@ export const membershipSchema = z.object({ tierExpirationDate: z.string().optional(), }) +const membershipType = (membershipType: scandicMemberships) => + z + .string() + // The memberships enum is in lower case so this makes sure it will match regardless of casing in the API response. + .transform((s) => s.toLowerCase()) + .pipe(z.literal(membershipType)) + +const friendsMembershipSchema = z + .object({ + membershipType: membershipType(scandicMemberships.guestpr), + membershipNumber: z.string(), + memberSince: z.string(), + }) + .merge(commonMembershipSchema) + +const otherMembershipSchema = z + .object({ + membershipType: z.string(), + membershipNumber: z.string().optional(), + memberSince: z.string().optional(), + }) + .merge(commonMembershipSchema) + +export const membershipSchema = z.union([ + friendsMembershipSchema, + otherMembershipSchema, +]) + export const getUserSchema = z .object({ data: z.object({ diff --git a/apps/scandic-web/types/user.ts b/apps/scandic-web/types/user.ts index 75f0fa05c..575bae645 100644 --- a/apps/scandic-web/types/user.ts +++ b/apps/scandic-web/types/user.ts @@ -1,13 +1,12 @@ -import { z } from "zod" +import type { z } from "zod" -import { +import type { RouterOutput } from "@/lib/trpc/client" +import type { creditCardSchema, getUserSchema, membershipSchema, } from "@/server/routers/user/output" -import type { RouterOutput } from "@/lib/trpc/client" - /** * All extended field needs to be added by API team to response or * we have to get the values from elsewhere @@ -18,6 +17,6 @@ export type SafeUser = RouterOutput["user"]["getSafely"] export type CreditCard = z.output -export interface Membership extends z.output {} +export type Membership = z.output export type Memberships = Membership[] diff --git a/apps/scandic-web/utils/user.ts b/apps/scandic-web/utils/user.ts index c0f2561a7..270cb0a0d 100644 --- a/apps/scandic-web/utils/user.ts +++ b/apps/scandic-web/utils/user.ts @@ -1,14 +1,14 @@ -import { z } from "zod" - import { - MembershipLevel, + type MembershipLevel, MembershipLevelEnum, } from "@/constants/membershipLevels" -import { getMembershipCardsSchema } from "@/server/routers/user/output" + +import type { z } from "zod" import type { Membership, Memberships, User } from "@/types/user" +import type { getMembershipCardsSchema } from "@/server/routers/user/output" -enum scandicMemberships { +export enum scandicMemberships { guestpr = "guestpr", scandicfriends = "scandicfriend's", }