diff --git a/src/lib/cache.lisp b/src/lib/cache.lisp deleted file mode 100644 index 31e840f..0000000 --- a/src/lib/cache.lisp +++ /dev/null @@ -1,17 +0,0 @@ -(defpackage #:website/lib/cache - (:use #:cl) - (:import-from #:function-cache - #:defcached - #:clear-cache - #:clear-cache-partial-arguments) - (:export #:memorize - #:clear-cache - #:clear-cache-partial-artuments)) -(in-package #:website/lib/cache) - -(defmacro memorize (name) - (let ((origin (gensym))) - `(progn - (setf (fdefinition ',origin) (fdefinition ',name)) - (defcached ,name (&rest args) - (apply #',origin args))))) diff --git a/src/lib/cms.lisp b/src/lib/cms.lisp index 567394e..26bf0be 100644 --- a/src/lib/cms.lisp +++ b/src/lib/cms.lisp @@ -3,30 +3,62 @@ (:import-from #:microcms #:define-list-client #:define-object-client) + (:import-from #:function-cache + #:defcached + #:clear-cache + #:clear-cache-partial-arguments) (:import-from #:website/lib/env #:microcms-service-domain #:microcms-api-key) - (:import-from #:website/lib/cache - #:memorize) - (:export #:get-about - #:*get-about-cache* - #:get-works - #:*get-works-cache* - #:get-blog-list - #:*get-blog-list-cache* - #:get-blog-detail - #:*get-blog-detail-cache*)) + (:export #:fetch-about + #:fetch-works + #:fetch-blog-list + #:fetch-blog-detail + #:clear-about-cache + #:clear-works-cache + #:clear-blog-list-cache + #:clear-blog-detail-cache)) (in-package #:website/lib/cms) (setf microcms:*service-domain* (microcms-service-domain)) (setf microcms:*api-key* (microcms-api-key)) (define-object-client about) -(memorize get-about) - (define-object-client works) -(memorize get-works) - (define-list-client blog) -(memorize get-blog-list) -(memorize get-blog-detail) + +(defcached fetch-about (&key draft-key) + (get-about :query (list :draft-key draft-key))) + +(defcached fetch-works (&key draft-key) + (get-works :query (list :draft-key draft-key))) + +(defcached fetch-blog-list (&key page) + ;TODO: pagenation + (declare (ignore page)) + (getf (get-blog-list :query '(:fields "id,title,publishedAt" + :limit 100)) + :contents)) + +(defcached fetch-blog-detail (id &key draft-key) + (get-blog-detail id :query (list :draft-key draft-key))) + +(defun clear-about-cache (new-draft-key) + (if new-draft-key + (clear-cache-partial-arguments *fetch-about-cache* `(:draft-key ,new-draft-key)) + (clear-cache *fetch-about-cache*))) + +(defun clear-works-cache (new-draft-key) + (if new-draft-key + (clear-cache-partial-arguments *fetch-works-cache* `(:draft-key ,new-draft-key)) + (clear-cache *fetch-works-cache*))) + +(defun clear-blog-cache (id old-draft-key new-draft-key) + (labels ((clear-detail-cache (id draft-key) + (clear-cache-partial-arguments *fetch-blog-detail-cache* + `(,id :draft-key ,draft-key)))) + (unless new-draft-key + (clear-cache *fetch-blog-list-cache*) + (clear-detail-cache id old-draft-key)) + (clear-detail-cache id new-draft-key))) + diff --git a/src/routes/about.lisp b/src/routes/about.lisp index c1b0796..6e320c0 100644 --- a/src/routes/about.lisp +++ b/src/routes/about.lisp @@ -3,7 +3,7 @@ #:hsx #:jingle) (:import-from #:website/lib/cms - #:get-about) + #:fetch-about) (:import-from #:website/components/article #:~article) (:export #:handle-get)) @@ -16,7 +16,7 @@ (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)))) + (let ((about (fetch-about :draft-key draft-key))) (~article :title "About" :content (getf about :content) diff --git a/src/routes/api/revalidate.lisp b/src/routes/api/revalidate.lisp index 687838a..7e3f1a0 100644 --- a/src/routes/api/revalidate.lisp +++ b/src/routes/api/revalidate.lisp @@ -7,13 +7,9 @@ (:import-from #:website/helper #:get-request-body-plist) (:import-from #:website/lib/cms - #:*get-about-cache* - #:*get-works-cache* - #:*get-blog-list-cache* - #:*get-blog-detail-cache*) - (:import-from #:website/lib/cache - #:clear-cache - #:clear-cache-partial-arguments) + #:clear-about-cache + #:clear-works-cache + #:clear-blog-cache) (:export #:handle-post)) (in-package #:website/routes/api/revalidate) @@ -28,23 +24,11 @@ (id (getf body :|id|)) (old-draft-key (accesses body :|contents| :|old| :|draftKey|)) (new-draft-key (accesses body :|contents| :|new| :|draftKey|))) - (cond ((string= api "about") - (if new-draft-key - (clear-cache-partial-arguments *get-about-cache* - (list :query (list :draft-key new-draft-key))) - (clear-cache *get-about-cache*))) - ((string= api "works") - (if new-draft-key - (clear-cache-partial-arguments *get-works-cache* - (list :query (list :draft-key new-draft-key))) - (clear-cache *get-works-cache*))) - ((string= api "blog") - (unless new-draft-key - (clear-cache *get-blog-list-cache*) - (clear-cache-partial-arguments *get-blog-detail-cache* - (list id :query (list :draft-key old-draft-key)))) - (clear-cache-partial-arguments *get-blog-detail-cache* - (list id :query (list :draft-key new-draft-key))))) + (cond ((string= api "about") (clear-about-cache new-draft-key)) + ((string= api "works") (clear-works-cache new-draft-key)) + ((string= api "blog") (clear-blog-cache id old-draft-key new-draft-key)) + (t (set-response-status :bad-request) + (return-from handle-post '(:|message| "Unknown API")))) (list :|api| api :|id| id :|old-draft-key| old-draft-key diff --git a/src/routes/blog/<id>.lisp b/src/routes/blog/<id>.lisp index e567b6e..cd0d012 100644 --- a/src/routes/blog/<id>.lisp +++ b/src/routes/blog/<id>.lisp @@ -3,7 +3,7 @@ #:hsx #:jingle) (:import-from #:website/lib/cms - #:get-blog-detail) + #:fetch-blog-detail) (:import-from #:website/routes/not-found #:handle-not-found) (:import-from #:website/components/article @@ -15,7 +15,7 @@ (with-request-params ((id :id nil) (draft-key "draft-key" nil)) params (setf (context :no-cache) draft-key) - (let ((blog (get-blog-detail id :query (list :draft-key draft-key)))) + (let ((blog (fetch-blog-detail id :draft-key draft-key))) (unless blog (return-from handle-get (handle-not-found))) (setf (context :metadata) (list :title (getf blog :title) diff --git a/src/routes/blog/index.lisp b/src/routes/blog/index.lisp index 33e02d5..6754330 100644 --- a/src/routes/blog/index.lisp +++ b/src/routes/blog/index.lisp @@ -3,7 +3,7 @@ #:hsx #:jingle) (:import-from #:website/lib/cms - #:get-blog-list) + #:fetch-blog-list) (:import-from #:website/lib/time #:asctime) (:export #:handle-get)) @@ -15,9 +15,7 @@ (defun handle-get (params) (declare (ignore params)) (setf (context :metadata) *metadata*) - (let ((blogs (getf (get-blog-list :query '(:fields "id,title,publishedAt" - :limit 100)) - :contents))) + (let ((blogs (fetch-blog-list :page 1))) (hsx (section (h1 :class "font-bold text-4xl mb-8" diff --git a/src/routes/works.lisp b/src/routes/works.lisp index a156940..570dce2 100644 --- a/src/routes/works.lisp +++ b/src/routes/works.lisp @@ -3,7 +3,7 @@ #:hsx #:jingle) (:import-from #:website/lib/cms - #:get-works) + #:fetch-works) (:import-from #:website/components/article #:~article) (:export #:handle-get)) @@ -16,7 +16,7 @@ (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)))) + (let ((works (fetch-works :draft-key draft-key))) (~article :title "Works" :content (getf works :content)