import { Lang } from "@scandic-hotels/common/constants/language" import { batchRequest } from "../graphql/batchRequest" import { EntryByUrlBatch1, EntryByUrlBatch2, EntryByUrlBatch3, } 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, }, }, { document: EntryByUrlBatch3, 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 const seoFilters = "seo_filters" in value.items[0] ? value.items[0].seo_filters : null if (seoFilters && seoFilters.length > 0) { return { contentType: content_type_uid, uid, seoFilters: seoFilters.flatMap((f) => f.filterConnection.edges?.flatMap((e) => e.node.slug) ), } } return { contentType: content_type_uid, uid, } } } return { contentType: null, uid: null, } }