Chore/refactor hotel trpc routes * chore(SW-3519): refactor trpc hotel routers * chore(SW-3519): refactor trpc hotel routers * refactor * merge * Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/refactor-hotel-trpc-routes Approved-by: Linus Flood
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { dt } from "@scandic-hotels/common/dt"
|
|
import { createCounter } from "@scandic-hotels/common/telemetry"
|
|
|
|
import * as api from "../../../api"
|
|
import { cache } from "../../../DUPLICATED/cache"
|
|
import { creditCardsSchema } from "../output"
|
|
|
|
import type { Session } from "next-auth"
|
|
|
|
export const getCreditCards = cache(
|
|
async ({
|
|
session,
|
|
onlyNonExpired,
|
|
}: {
|
|
session: Session
|
|
onlyNonExpired?: boolean
|
|
}) => {
|
|
const getCreditCardsCounter = createCounter("user", "getCreditCards")
|
|
const metricsGetCreditCards = getCreditCardsCounter.init({
|
|
onlyNonExpired,
|
|
})
|
|
|
|
metricsGetCreditCards.start()
|
|
|
|
const apiResponse = await api.get(api.endpoints.v1.Profile.creditCards, {
|
|
headers: {
|
|
Authorization: `Bearer ${session.token.access_token}`,
|
|
},
|
|
})
|
|
|
|
if (!apiResponse.ok) {
|
|
await metricsGetCreditCards.httpError(apiResponse)
|
|
return null
|
|
}
|
|
|
|
const apiJson = await apiResponse.json()
|
|
const verifiedData = creditCardsSchema.safeParse(apiJson)
|
|
if (!verifiedData.success) {
|
|
metricsGetCreditCards.validationError(verifiedData.error)
|
|
return null
|
|
}
|
|
|
|
const result = verifiedData.data.data.filter((card) => {
|
|
if (onlyNonExpired) {
|
|
try {
|
|
const expirationDate = dt(card.expirationDate).startOf("day")
|
|
const currentDate = dt().startOf("day")
|
|
return expirationDate > currentDate
|
|
} catch (_) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
|
|
metricsGetCreditCards.success()
|
|
|
|
return result
|
|
}
|
|
)
|