From 725c967b4f602e75d0d5cf7fb6c2d3b5fe6c1e50 Mon Sep 17 00:00:00 2001 From: Hare Date: Mon, 26 Aug 2024 06:39:45 +0900 Subject: [PATCH] feat: loading data for article layout --- src/lib/publish.ts | 15 +++ src/lib/server/database/article.ts | 12 ++ src/routes/article/+layout.server.ts | 20 +++ src/routes/article/+layout.svelte | 162 +++++++++++++++++++++++- src/routes/article/+page.svelte | 0 src/routes/article/[id]/+page.server.ts | 46 +++++++ src/routes/article/[id]/+page.svelte | 3 + 7 files changed, 255 insertions(+), 3 deletions(-) create mode 100644 src/lib/publish.ts create mode 100644 src/lib/server/database/article.ts create mode 100644 src/routes/article/+layout.server.ts delete mode 100644 src/routes/article/+page.svelte diff --git a/src/lib/publish.ts b/src/lib/publish.ts new file mode 100644 index 0000000..62cc719 --- /dev/null +++ b/src/lib/publish.ts @@ -0,0 +1,15 @@ +export type Publish = + | 'public' + | 'limited' // noindex + | 'private'; // noindex nofollow + +export function robots(publish: Publish) { + switch (publish) { + case 'public': + return ''; + case 'limited': + return 'noindex'; + case 'private': + return 'noindex, nofollow'; + } +} diff --git a/src/lib/server/database/article.ts b/src/lib/server/database/article.ts new file mode 100644 index 0000000..fa2745e --- /dev/null +++ b/src/lib/server/database/article.ts @@ -0,0 +1,12 @@ +export type Article = { + seq: number; + id: string; + title: string; + category: string; + released_at: Date; + updated_at: Date; + tags: string[]; + image: string; + publish: string; + content: string; +}; \ No newline at end of file diff --git a/src/routes/article/+layout.server.ts b/src/routes/article/+layout.server.ts new file mode 100644 index 0000000..ceb38bc --- /dev/null +++ b/src/routes/article/+layout.server.ts @@ -0,0 +1,20 @@ +import type { Article } from '$lib/server/database/article'; +import type { LayoutServerLoad } from './$types'; +export const load: LayoutServerLoad = async () => { + return { + props: { + article: { + seq: 0, + id: 'test', + title: 'test', + category: 'test', + released_at: new Date(), + updated_at: new Date(), + tags: ['test'], + image: 'test', + publish: 'test', + content: 'test', + } as Article, + }, + }; +}; \ No newline at end of file diff --git a/src/routes/article/+layout.svelte b/src/routes/article/+layout.svelte index a683fad..eb14329 100644 --- a/src/routes/article/+layout.svelte +++ b/src/routes/article/+layout.svelte @@ -1,5 +1,161 @@ - - \ No newline at end of file + + {data.props.article.title} | Blog | HareWorks + + + + + + {#if data.props.article.updated_at} + + {/if} + + + + + + + +
+
+

{data.props.article.title}

+
+ + released + {#if data.props.article.updated_at}
+ updated + {/if} +
+ + {data.props.article.category[0].toUpperCase() + data.props.article.category.slice(1)} + {#each data.props.article.tags as tag} + {tag} + {/each} + +
+
+
+
+
+ +
+
+
+
+
+ + diff --git a/src/routes/article/+page.svelte b/src/routes/article/+page.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/src/routes/article/[id]/+page.server.ts b/src/routes/article/[id]/+page.server.ts index e69de29..e9b960c 100644 --- a/src/routes/article/[id]/+page.server.ts +++ b/src/routes/article/[id]/+page.server.ts @@ -0,0 +1,46 @@ +import type { Article } from '$lib/server/database/article'; +import type { PageServerLoad } from './$types'; +import PG from '$lib/server/database'; + +export const load: PageServerLoad = async ({ params }) => { + const { id } = params; + + const db = await PG(); + await db.begin(); + try { + const article = await db.query( + "SELECT * FROM article WHERE id = $1", + [id] + ); + if (article.rowCount === 0) { + return { + status: 404, + error: new Error('Not found'), + }; + } + const row = article.rows[0]; + const data: Article = { + seq: row.seq, + id: row.id, + title: row.title, + category: row.category, + released_at: row.released_at, + updated_at: row.updated_at, + tags: row.tags, + image: row.image, + publish: row.publish, + content: row.content, + }; + return { + props: { data }, + }; + } catch (e) { + await db.rollback(); + return { + status: 500, + error: e as Error, + }; + } finally { + await db.release(); + } +}; \ No newline at end of file diff --git a/src/routes/article/[id]/+page.svelte b/src/routes/article/[id]/+page.svelte index e69de29..85c9b3e 100644 --- a/src/routes/article/[id]/+page.svelte +++ b/src/routes/article/[id]/+page.svelte @@ -0,0 +1,3 @@ + \ No newline at end of file