117 lines
2.5 KiB
TypeScript
117 lines
2.5 KiB
TypeScript
|
import type { RequestHandler } from '@sveltejs/kit'
|
||
|
|
||
|
import { Call, gql, MediaItem, Page, Project } from '$lib/api'
|
||
|
|
||
|
export const get: RequestHandler = async (args) => {
|
||
|
const { type, slug } = args.params
|
||
|
const allChar = '*'
|
||
|
const all = slug === allChar
|
||
|
|
||
|
switch (type) {
|
||
|
case 'pages': {
|
||
|
if (all) {
|
||
|
const data = await Call<{ pages: { nodes: Page[] } }>(gql`
|
||
|
query {
|
||
|
pages {
|
||
|
nodes {
|
||
|
title
|
||
|
content
|
||
|
slug
|
||
|
status
|
||
|
id
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
`)
|
||
|
return { body: data.pages.nodes }
|
||
|
} else {
|
||
|
const data = await Call<{ page: Page }>(
|
||
|
gql`
|
||
|
query ($slug: ID!) {
|
||
|
page(id: $slug, idType: URI) {
|
||
|
title
|
||
|
content
|
||
|
slug
|
||
|
status
|
||
|
id
|
||
|
}
|
||
|
}
|
||
|
`,
|
||
|
{ slug: '/' + slug }
|
||
|
)
|
||
|
return { body: data.page }
|
||
|
}
|
||
|
}
|
||
|
case 'works': {
|
||
|
if (all) {
|
||
|
const data = await Call<{ works: { nodes: MediaItem[] } }>(gql`
|
||
|
query {
|
||
|
works {
|
||
|
nodes {
|
||
|
id
|
||
|
title
|
||
|
content
|
||
|
slug
|
||
|
status
|
||
|
work {
|
||
|
date
|
||
|
image {
|
||
|
sourceUrl
|
||
|
srcSet
|
||
|
altText
|
||
|
}
|
||
|
link
|
||
|
role
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
`)
|
||
|
return { body: data.works.nodes }
|
||
|
} else {
|
||
|
}
|
||
|
}
|
||
|
case 'projects': {
|
||
|
if (all) {
|
||
|
const data = await Call<{ projects: { nodes: Project[] } }>(gql`
|
||
|
query {
|
||
|
projects {
|
||
|
nodes {
|
||
|
id
|
||
|
title
|
||
|
content
|
||
|
slug
|
||
|
status
|
||
|
project {
|
||
|
date
|
||
|
description
|
||
|
link
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
`)
|
||
|
return { body: data.projects.nodes }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
case 'media': {
|
||
|
const data = await Call<{ mediaItem: MediaItem }>(
|
||
|
gql`
|
||
|
query ($slug: ID!) {
|
||
|
mediaItem(id: $slug, idType: SLUG) {
|
||
|
srcSet
|
||
|
altText
|
||
|
sourceUrl
|
||
|
}
|
||
|
}
|
||
|
`,
|
||
|
{ slug }
|
||
|
)
|
||
|
return { body: data.mediaItem }
|
||
|
}
|
||
|
default:
|
||
|
return { status: 404 }
|
||
|
}
|
||
|
}
|