diff --git a/articles b/articles
index b72a133..172da35 160000
--- a/articles
+++ b/articles
@@ -1 +1 @@
-Subproject commit b72a133cdd6acd08d3edf802af2ebfac0a630bf9
+Subproject commit 172da3590a2e7cec7b41dcf9a60306db277b7159
diff --git a/src/lib/article.ts b/src/lib/article.ts
index e108d41..352397d 100644
--- a/src/lib/article.ts
+++ b/src/lib/article.ts
@@ -1,7 +1,14 @@
-export type Content = {
+import type { Publish } from "./publish";
+
+export type Article = {
+ seq: number;
+ id: string;
title: string;
- image: string;
- date: string;
- link: string;
+ category: string;
+ released_at: Date;
+ updated_at: Date;
tags: string[];
+ image: string;
+ publish: Publish;
+ content: string;
};
\ No newline at end of file
diff --git a/src/lib/components/head.svelte b/src/lib/components/head.svelte
new file mode 100644
index 0000000..621607d
--- /dev/null
+++ b/src/lib/components/head.svelte
@@ -0,0 +1,19 @@
+
+
+
{article.title} | Blog | HareWorks
+
+
+
+
+
+{#if article.updated_at}
+
+{/if}
+
+
+
+
\ No newline at end of file
diff --git a/src/lib/page/article_page.svelte b/src/lib/page/article_page.svelte
new file mode 100644
index 0000000..57dfe73
--- /dev/null
+++ b/src/lib/page/article_page.svelte
@@ -0,0 +1,162 @@
+
+
+
+ {data.title} | Blog | HareWorks
+
+
+
+
+
+ {#if data.updated_at}
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/server/database/article.ts b/src/lib/server/database/article.ts
deleted file mode 100644
index fa2745e..0000000
--- a/src/lib/server/database/article.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-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/lib/server/database/init_db.ts b/src/lib/server/database/init_db.ts
index a1fa58e..b96f03c 100644
--- a/src/lib/server/database/init_db.ts
+++ b/src/lib/server/database/init_db.ts
@@ -105,22 +105,24 @@ export default async function init() {
}
}
}
- scanDir('./articles/dist');
+ scanDir('./articles/article');
await db.query('update tag set ref_count = 0');
db.commit();
for (const { path, id } of articleFiles) {
const res = await db.query('select * from article where id = $1', [id]);
- const md = await compile(fs.readFileSync(path, 'utf-8'));
- const title = md.data.fm.title;
+ const compiled = await compile(fs.readFileSync(path, 'utf-8'));
+ const title = compiled.data.fm.title;
const category = path.split('/')[3];
- const tags: string[] = md.data.fm.tags;
- const released_at = new Date(md.data.fm.released_at);
- const updated_at = new Date(md.data.fm.updated_at);
- const image = md.data.fm.image;
- const publish = md.data.fm.publish;
- const content = md.code;
+ const tags: string[] = compiled.data.fm.tags;
+ const released_at = new Date(compiled.data.fm.released_at);
+ const updated_at = new Date(compiled.data.fm.updated_at);
+ const image = compiled.data.fm.image;
+ const publish = compiled.data.fm.publish;
+ const content = compiled.code
+ .replace(/>{@html ``}<\/pre>/g, '
');
if (res.rowCount == 0) {
console.log(`New article: ${id}`);
await db.query(
diff --git a/src/routes/article/+layout.server.ts b/src/routes/article/+layout.server.ts
deleted file mode 100644
index ceb38bc..0000000
--- a/src/routes/article/+layout.server.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-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 eb14329..34678ce 100644
--- a/src/routes/article/+layout.svelte
+++ b/src/routes/article/+layout.svelte
@@ -1,161 +1,6 @@
-
- {data.props.article.title} | Blog | HareWorks
-
-
-
-
-
- {#if data.props.article.updated_at}
-
- {/if}
-
-
-
-
-
-
-
-
-
-
{data.props.article.title}
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/routes/article/[category]/[id]/+page.server.ts b/src/routes/article/[category]/[id]/+page.server.ts
index e69de29..c7c9759 100644
--- a/src/routes/article/[category]/[id]/+page.server.ts
+++ b/src/routes/article/[category]/[id]/+page.server.ts
@@ -0,0 +1,29 @@
+import type { Article } from '$lib/article';
+import type { PageServerLoad } from './$types';
+import PG from '$lib/server/database';
+import { error } from '@sveltejs/kit';
+
+export const load: PageServerLoad = async ({ params }) => {
+ const { category, id } = params;
+ console.log(id);
+
+ const db = await PG();
+ await db.begin();
+ try {
+ const article = await db.query(
+ "SELECT * FROM article WHERE id = $1 AND category = $2",
+ [id, category]
+ );
+ if (article.rowCount === 0) {
+ error(404, 'Not found');
+ }
+ const row = article.rows[0];
+ const data: Article = { ...row };
+ return data
+ } catch (e) {
+ await db.rollback();
+ error(500, (e as Error).message);
+ } finally {
+ await db.release();
+ }
+};
\ No newline at end of file
diff --git a/src/routes/article/[category]/[id]/+page.svelte b/src/routes/article/[category]/[id]/+page.svelte
index e69de29..dc6c70e 100644
--- a/src/routes/article/[category]/[id]/+page.svelte
+++ b/src/routes/article/[category]/[id]/+page.svelte
@@ -0,0 +1,10 @@
+
+
+
+ {@html data.content}
+
diff --git a/src/routes/article/[category]/[series]/[id]/+page.server.ts b/src/routes/article/[category]/[series]/[id]/+page.server.ts
new file mode 100644
index 0000000..50dfac0
--- /dev/null
+++ b/src/routes/article/[category]/[series]/[id]/+page.server.ts
@@ -0,0 +1,29 @@
+import type { Article } from '$lib/article';
+import type { PageServerLoad } from './$types';
+import PG from '$lib/server/database';
+import { error } from '@sveltejs/kit';
+
+export const load: PageServerLoad = async ({ params }) => {
+ const { category, id, series } = params;
+ console.log(id);
+
+ const db = await PG();
+ await db.begin();
+ try {
+ const article = await db.query(
+ "SELECT * FROM article WHERE id = $1 AND category = $2 AND series = $3",
+ [id, category, series]
+ );
+ if (article.rowCount === 0) {
+ error(404, 'Not found');
+ }
+ const row = article.rows[0];
+ const data: Article = { ...row };
+ return data
+ } catch (e) {
+ await db.rollback();
+ error(500, (e as Error).message);
+ } finally {
+ await db.release();
+ }
+};
\ No newline at end of file
diff --git a/src/routes/article/[category]/[series]/[id]/+page.svelte b/src/routes/article/[category]/[series]/[id]/+page.svelte
new file mode 100644
index 0000000..81a88d4
--- /dev/null
+++ b/src/routes/article/[category]/[series]/[id]/+page.svelte
@@ -0,0 +1,10 @@
+
+
+
+ {@html data.content}
+
diff --git a/src/routes/article/[id]/+page.server.ts b/src/routes/article/[id]/+page.server.ts
deleted file mode 100644
index e9b960c..0000000
--- a/src/routes/article/[id]/+page.server.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-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
deleted file mode 100644
index 85c9b3e..0000000
--- a/src/routes/article/[id]/+page.svelte
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file