Counter name is now searchable and add counter for redirects * refactor: createCounter() only takes one argument, the name of the counter. Makes it easier to search for * feat: add counter when we do a redirect from redirect-service Approved-by: Linus Flood
82 lines
2.0 KiB
TypeScript
82 lines
2.0 KiB
TypeScript
import stringify from "json-stable-stringify-without-jsonify"
|
|
|
|
import { getCacheClient } from "@scandic-hotels/common/dataCache"
|
|
import { createCounter } from "@scandic-hotels/common/telemetry"
|
|
|
|
import * as api from "../../../api"
|
|
import { generateChildrenString } from "../helpers"
|
|
import { roomFeaturesSchema } from "../output"
|
|
|
|
import type { RoomFeaturesInput } from "../input"
|
|
|
|
export async function getRoomFeaturesInventory(
|
|
input: RoomFeaturesInput,
|
|
token: string
|
|
) {
|
|
const {
|
|
adults,
|
|
childrenInRoom,
|
|
endDate,
|
|
hotelId,
|
|
roomFeatureCodes,
|
|
startDate,
|
|
} = input
|
|
|
|
const params = {
|
|
adults,
|
|
hotelId,
|
|
roomFeatureCode: roomFeatureCodes,
|
|
roomStayEndDate: endDate,
|
|
roomStayStartDate: startDate,
|
|
...(childrenInRoom?.length && {
|
|
children: generateChildrenString(childrenInRoom),
|
|
}),
|
|
}
|
|
|
|
const getRoomFeaturesInventoryCounter = createCounter(
|
|
"hotel.getRoomFeaturesInventory"
|
|
)
|
|
const metricsGetRoomFeaturesInventory =
|
|
getRoomFeaturesInventoryCounter.init(params)
|
|
|
|
metricsGetRoomFeaturesInventory.start()
|
|
|
|
const cacheClient = await getCacheClient()
|
|
|
|
const result = cacheClient.cacheOrGet(
|
|
stringify(input),
|
|
async function () {
|
|
const apiResponse = await api.get(
|
|
api.endpoints.v1.Availability.roomFeatures(hotelId),
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${token}`,
|
|
},
|
|
},
|
|
params
|
|
)
|
|
|
|
if (!apiResponse.ok) {
|
|
await metricsGetRoomFeaturesInventory.httpError(apiResponse)
|
|
return null
|
|
}
|
|
|
|
const data = await apiResponse.json()
|
|
const validatedRoomFeaturesData = roomFeaturesSchema.safeParse(data)
|
|
if (!validatedRoomFeaturesData.success) {
|
|
metricsGetRoomFeaturesInventory.validationError(
|
|
validatedRoomFeaturesData.error
|
|
)
|
|
return null
|
|
}
|
|
|
|
return validatedRoomFeaturesData.data
|
|
},
|
|
"5m"
|
|
)
|
|
|
|
metricsGetRoomFeaturesInventory.success()
|
|
|
|
return result
|
|
}
|