Files
web/server/routers/contentstack/breadcrumbs/query.ts
Matilda Landström 4cfd908024 refactor: update names
2024-05-30 16:01:04 +02:00

226 lines
6.8 KiB
TypeScript

import {
GetAccountPageBreadcrumbs,
GetAccountPageBreadcrumbsRefs,
} from "@/lib/graphql/Query/BreadcrumbsAccountPage.graphql"
import {
GetLoyaltyPageBreadcrumbs,
GetLoyaltyPageBreadcrumbsRefs,
} from "@/lib/graphql/Query/BreadcrumbsLoyaltyPage.graphql"
import { request } from "@/lib/graphql/request"
import { internalServerError, notFound } from "@/server/errors/trpc"
import { contentstackProcedure, router } from "@/server/trpc"
import {
generateRefsResponseTag,
generateTag,
generateTags,
} from "@/utils/generateTag"
import { removeMultipleSlashes } from "@/utils/url"
import {
getBreadcrumbsSchema,
validateBreadcrumbsConstenstackSchema,
validateBreadcrumbsConstenstackSchemaLoyalty,
validateBreadcrumbsRefsConstenstackSchema,
validateBreadcrumbsRefsConstenstackSchemaLoyalty,
} from "./output"
import {
affix,
getConnections,
getConnectionsLoyalty,
homeBreadcrumbs,
} from "./utils"
import type {
GetAccountPageBreadcrumbsData,
GetAccountPageBreadcrumbsRefsData,
GetLoyaltyPageBreadcrumbsData,
GetLoyaltyPageBreadcrumbsRefsData,
} from "@/types/requests/myPages/breadcrumbs"
export const breadcrumbsQueryRouter = router({
get: contentstackProcedure.query(async ({ ctx }) => {
const refsResponse = await request<GetAccountPageBreadcrumbsRefsData>(
GetAccountPageBreadcrumbsRefs,
{ locale: ctx.lang, url: ctx.pathname },
{
next: {
tags: [generateRefsResponseTag(ctx.lang, ctx.pathname, affix)],
},
}
)
console.log(ctx.pathname)
console.log(refsResponse.data.all_account_page)
if (!refsResponse.data) {
throw notFound(refsResponse)
}
const validatedRefsData =
validateBreadcrumbsRefsConstenstackSchema.safeParse(refsResponse.data)
if (!validatedRefsData.success) {
throw internalServerError(validatedRefsData.error)
}
console.log(validatedRefsData.data)
const connections = getConnections(validatedRefsData.data)
console.log(connections)
const tags = generateTags(ctx.lang, connections)
console.log(tags)
const page = validatedRefsData.data.all_account_page.items[0]
console.log(page)
tags.push(generateTag(ctx.lang, page.system.uid, affix))
console.log(tags)
const response = await request<GetAccountPageBreadcrumbsData>(
GetAccountPageBreadcrumbs,
{ locale: ctx.lang, url: ctx.pathname },
{ next: { tags } }
)
console.log(response.data)
if (!response.data) {
throw notFound(response)
}
const validatedBreadcrumbsData =
validateBreadcrumbsConstenstackSchema.safeParse(response.data)
if (!validatedBreadcrumbsData.success) {
throw internalServerError(validatedBreadcrumbsData.error)
}
const parentBreadcrumbs =
validatedBreadcrumbsData.data.all_account_page.items[0].breadcrumbs.parentsConnection.edges.map(
(breadcrumb) => {
return {
href: removeMultipleSlashes(
`/${breadcrumb.node.system.locale}/${breadcrumb.node.url}`
),
title: breadcrumb.node.breadcrumbs.title,
uid: breadcrumb.node.system.uid,
}
}
)
const pageBreadcrumb =
validatedBreadcrumbsData.data.all_account_page.items.map((breadcrumb) => {
return {
title: breadcrumb.breadcrumbs.title,
uid: breadcrumb.system.uid,
}
})
const breadcrumbs = [
homeBreadcrumbs[ctx.lang],
parentBreadcrumbs,
pageBreadcrumb,
].flat()
console.log(breadcrumbs)
const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs)
if (!validatedBreadcrumbs.success) {
throw internalServerError(validatedBreadcrumbs.error)
}
return validatedBreadcrumbs.data
}),
loyalty: contentstackProcedure.query(async ({ ctx }) => {
console.log("HEJ", ctx)
const refsResponse = await request<GetLoyaltyPageBreadcrumbsRefsData>(
GetLoyaltyPageBreadcrumbsRefs,
{ locale: ctx.lang, url: ctx.pathname },
{
next: {
tags: [generateRefsResponseTag(ctx.lang, ctx.pathname, affix)],
},
}
)
console.log(ctx.pathname)
console.log(refsResponse.data.all_loyalty_page)
if (!refsResponse.data) {
throw notFound(refsResponse)
}
/*if (refsResponse.data.all_loyalty_page.items) {
Object.assign(
refsResponse.data.all_loyalty_page.items,
refsResponse.data.all_loyalty_page.items[0].web
)
delete refsResponse.data.all_loyalty_page.items[0].web
}*/
console.log(
refsResponse.data.all_loyalty_page.items[0].web.breadcrumbss
.parentsConnection
)
const validatedRefsData =
validateBreadcrumbsRefsConstenstackSchemaLoyalty.safeParse(
refsResponse.data
)
console.log("VALI", validatedRefsData)
if (!validatedRefsData.success) {
throw internalServerError(validatedRefsData.error)
}
console.log(
validatedRefsData.data.all_loyalty_page.items[0].web.breadcrumbss
)
const connections = getConnectionsLoyalty(validatedRefsData.data)
console.log(connections)
const tags = generateTags(ctx.lang, connections)
console.log(tags)
const page = validatedRefsData.data.all_loyalty_page.items[0]
console.log(page)
tags.push(generateTag(ctx.lang, page.system.uid, affix))
console.log(tags)
const response = await request<GetLoyaltyPageBreadcrumbsData>(
GetLoyaltyPageBreadcrumbs,
{ locale: ctx.lang, url: ctx.pathname },
{ next: { tags } }
)
console.log(response.data)
if (!response.data) {
throw notFound(response)
}
const validatedBreadcrumbsData =
validateBreadcrumbsConstenstackSchemaLoyalty.safeParse(response.data)
console.log(validatedBreadcrumbsData)
if (!validatedBreadcrumbsData.success) {
throw internalServerError(validatedBreadcrumbsData.error)
}
const parentBreadcrumbs =
validatedBreadcrumbsData.data.all_loyalty_page.items[0].web.breadcrumbss.parentsConnection.edges.map(
(breadcrumb) => {
return {
href: removeMultipleSlashes(
`/${breadcrumb.node.system.locale}/${breadcrumb.node.url}`
),
title: breadcrumb.node.breadcrumbs.title,
uid: breadcrumb.node.system.uid,
}
}
)
const pageBreadcrumb =
validatedBreadcrumbsData.data.all_loyalty_page.items.map((breadcrumb) => {
return {
title: breadcrumb.web.breadcrumbss.title,
uid: breadcrumb.system.uid,
}
})
const breadcrumbs = [
homeBreadcrumbs[ctx.lang],
parentBreadcrumbs,
pageBreadcrumb,
].flat()
console.log(breadcrumbs)
const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs)
if (!validatedBreadcrumbs.success) {
throw internalServerError(validatedBreadcrumbs.error)
}
return validatedBreadcrumbs.data
}),
})