import { Lang } from "@scandic-hotels/common/constants/language" import { batchRequest } from "../graphql/batchRequest" import { EntryByUrlBatch1, EntryByUrlBatch2, } from "../graphql/Query/ResolveEntry.graphql" import { validateEntryResolveSchema } from "../types/entry" export function resolveEntryCacheKey(lang: Lang, url: string) { return `${lang}:${url}:resolveentry` } export async function resolve(url: string, lang = Lang.en) { const variables = { locale: lang, url: url || "/" } const cacheKey = resolveEntryCacheKey(variables.locale, variables.url) // The maximum amount of content types you can query is 6, therefor more // than that is being batched const response = await batchRequest([ { document: EntryByUrlBatch1, variables, cacheOptions: { ttl: "max", key: cacheKey, }, }, { document: EntryByUrlBatch2, variables, cacheOptions: { ttl: "max", key: cacheKey, }, }, ]) const validatedData = validateEntryResolveSchema.safeParse(response.data) if (!validatedData.success) { return { error: validatedData.error, } } for (const value of Object.values(validatedData.data)) { if (value.total) { const { content_type_uid, uid } = value.items[0].system return { contentType: content_type_uid, uid, } } } return { contentType: null, uid: null, } }