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] 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)))
+             ")")))))))