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/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/work.lisp b/src/routes/work.lisp deleted file mode 100644 index c1e6cf4..0000000 --- a/src/routes/work.lisp +++ /dev/null @@ -1,19 +0,0 @@ -(defpackage #:website/routes/work - (:use #:cl - #:hsx - #:jingle) - (:import-from #:website/lib/cms - #:get-work) - (:import-from #:website/lib/time - #:datetime - #:jp-datetime) - (:export #:handle-get)) -(in-package #:website/routes/work) - -(defparameter *metadata* - (list :title "work")) - -(defun handle-get (params) - (declare (ignore params)) - (setf (context :metadata) *metadata*) - (hsx (p "coming soon"))) diff --git a/src/routes/works.lisp b/src/routes/works.lisp new file mode 100644 index 0000000..9110875 --- /dev/null +++ b/src/routes/works.lisp @@ -0,0 +1,31 @@ +(defpackage #:website/routes/works + (:use #:cl + #:hsx + #:jingle) + (:import-from #:website/lib/cms + #:get-works) + (:import-from #:website/lib/time + #:datetime + #:jp-datetime) + (:export #:handle-get)) +(in-package #:website/routes/works) + +(defparameter *metadata* + (list :title "works")) + +(defun handle-get (params) + (setf (context :metadata) *metadata*) + (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))) + ")")))))))