From fd28b11c00b097cde6f84813f3053ec3e04d4104 Mon Sep 17 00:00:00 2001
From: Akira Tempaku <paku@skyizwhite.dev>
Date: Sun, 18 May 2025 08:12:43 +0900
Subject: [PATCH 1/2] Rename work to works

---
 src/components/header.lisp           | 2 +-
 src/lib/cms.lisp                     | 6 +++---
 src/routes/{work.lisp => works.lisp} | 8 ++++----
 3 files changed, 8 insertions(+), 8 deletions(-)
 rename src/routes/{work.lisp => works.lisp} (73%)

diff --git a/src/components/header.lisp b/src/components/header.lisp
index 9546095..ca08c9b 100644
--- a/src/components/header.lisp
+++ b/src/components/header.lisp
@@ -7,7 +7,7 @@
 
 (defparameter *nav-menu*
   '(("/about" "about")
-    ("/work" "work")
+    ("/works" "works")
     ("/blog" "blog")))
 
 (defcomp ~pc-header ()
diff --git a/src/lib/cms.lisp b/src/lib/cms.lisp
index 7f75c80..f374ad9 100644
--- a/src/lib/cms.lisp
+++ b/src/lib/cms.lisp
@@ -9,7 +9,7 @@
                 #:microcms-service-domain
                 #:microcms-api-key)
   (:export #:get-about
-           #:get-work
+           #:get-works
            #:get-blog-list
            #:get-blog-detail))
 (in-package #:website/lib/cms)
@@ -27,8 +27,8 @@
 (define-object-client about)
 (memorize get-about)
 
-(define-object-client work)
-(memorize get-work)
+(define-object-client works)
+(memorize get-works)
 
 (define-list-client blog)
 (memorize get-blog-list)
diff --git a/src/routes/work.lisp b/src/routes/works.lisp
similarity index 73%
rename from src/routes/work.lisp
rename to src/routes/works.lisp
index c1e6cf4..b331190 100644
--- a/src/routes/work.lisp
+++ b/src/routes/works.lisp
@@ -1,17 +1,17 @@
-(defpackage #:website/routes/work
+(defpackage #:website/routes/works
   (:use #:cl
         #:hsx
         #:jingle)
   (:import-from #:website/lib/cms
-                #:get-work)
+                #:get-works)
   (:import-from #:website/lib/time
                 #:datetime
                 #:jp-datetime)
   (:export #:handle-get))
-(in-package #:website/routes/work)
+(in-package #:website/routes/works)
 
 (defparameter *metadata*
-  (list :title "work"))
+  (list :title "works"))
 
 (defun handle-get (params)
   (declare (ignore params))

From 688ef6dc18b79bbc4d0ee39c23e9defc79d6bf98 Mon Sep 17 00:00:00 2001
From: Akira Tempaku <paku@skyizwhite.dev>
Date: Sun, 18 May 2025 11:05:02 +0900
Subject: [PATCH 2/2] Add contents to works page

---
 src/renderer.lisp              |  4 +++-
 src/routes/about.lisp          |  3 ++-
 src/routes/api/revalidate.lisp |  6 ++++--
 src/routes/works.lisp          | 16 ++++++++++++++--
 4 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/src/renderer.lisp b/src/renderer.lisp
index 7863e38..7891cdd 100644
--- a/src/renderer.lisp
+++ b/src/renderer.lisp
@@ -16,7 +16,9 @@
 
 (defmethod jingle:process-response :around ((app jingle:app) result)
   (when (eq (request-method *request*) :get)
-    (set-response-header :cache-control "public, max-age=60"))
+    (if (context :no-cache)
+        (set-response-header :cache-control "private, no-store, must-revalidate")
+        (set-response-header :cache-control "public, max-age=60")))
   (cond ((api-request-p)
          (set-response-header :content-type "application/json; charset=utf-8") 
          (call-next-method app (to-json result)))
diff --git a/src/routes/about.lisp b/src/routes/about.lisp
index 1fd330c..22c5241 100644
--- a/src/routes/about.lisp
+++ b/src/routes/about.lisp
@@ -17,13 +17,14 @@
 (defun handle-get (params)
   (setf (context :metadata) *metadata*)
   (with-request-params ((draft-key "draft-key" nil)) params
+    (setf (context :no-cache) draft-key)
     (let ((about (get-about :query (list :draft-key draft-key))))
       (hsx
        (<>
          (and draft-key (hsx (p :class "text-lg text-pink-500" "下書きモード")))
          (article :class "prose max-w-none"
            (h1 "About")
-           (div  :class "flex justify-center"
+           (div :class "flex justify-center"
              (figure :class "flex flex-col items-center"
                (img
                  :src (accesses about :avatar :url)
diff --git a/src/routes/api/revalidate.lisp b/src/routes/api/revalidate.lisp
index 7c0457e..03d4a4b 100644
--- a/src/routes/api/revalidate.lisp
+++ b/src/routes/api/revalidate.lisp
@@ -8,7 +8,8 @@
   (:import-from #:website/helper
                 #:get-request-body-plist)
   (:import-from #:website/lib/cms
-                #:get-about)
+                #:get-about
+                #:get-works)
   (:export #:handle-post))
 (in-package #:website/routes/api/revalidate)
 
@@ -20,5 +21,6 @@
     (return-from handle-post '(:|message| "Invalid token")))
   (let* ((body (get-request-body-plist))
          (api (getf body :|api|)))
-    (cond ((string= api "about") (clear-cache 'get-about)))
+    (cond ((string= api "about") (clear-cache 'get-about))
+          ((string= api "works") (clear-cache 'get-works)))
     '(:|message| "ok")))
diff --git a/src/routes/works.lisp b/src/routes/works.lisp
index b331190..9110875 100644
--- a/src/routes/works.lisp
+++ b/src/routes/works.lisp
@@ -14,6 +14,18 @@
   (list :title "works"))
 
 (defun handle-get (params)
-  (declare (ignore params))
   (setf (context :metadata) *metadata*)
-  (hsx (p "coming soon")))
+  (with-request-params ((draft-key "draft-key" nil)) params
+    (setf (context :no-cache) draft-key)
+    (let ((works (get-works :query (list :draft-key draft-key))))
+      (hsx
+       (<>
+         (and draft-key (hsx (p :class "text-lg text-pink-500" "下書きモード")))
+         (article :class "prose max-w-none"
+           (h1 "Works")
+           (raw! (getf works :content))
+           (p :class "text-right"
+             "(最終更新:"
+             (|time| :datetime (datetime (getf works :revised-at))
+                     (jp-datetime (getf works :revised-at)))
+             ")")))))))