diff --git a/qlfile b/qlfile index 259ee71..2f0ba9c 100644 --- a/qlfile +++ b/qlfile @@ -8,3 +8,4 @@ ql cl-dotenv ql clack-errors git microcms https://github.com/skyizwhite/microcms-lisp-sdk ql local-time +ql function-cache diff --git a/qlfile.lock b/qlfile.lock index ef9d5da..f41858f 100644 --- a/qlfile.lock +++ b/qlfile.lock @@ -42,3 +42,7 @@ (:class qlot/source/ql:source-ql :initargs (:%version :latest) :version "ql-2024-10-12")) +("function-cache" . + (:class qlot/source/ql:source-ql + :initargs (:%version :latest) + :version "ql-2023-10-21")) diff --git a/src/lib/cms.lisp b/src/lib/cms.lisp index 75b7354..e61aa08 100644 --- a/src/lib/cms.lisp +++ b/src/lib/cms.lisp @@ -3,18 +3,33 @@ (:import-from #:microcms #:define-list-client #:define-object-client) + (:import-from #:function-cache + #:defcached) (:import-from #:website/lib/env #:microcms-service-domain #:microcms-api-key) - (:export #:get-blog-list - #:get-blog-detail - #:get-about - #:get-work)) + (:export #:get-about + #:get-work + #:get-blog-list + #:get-blog-detail)) (in-package #:website/lib/cms) (setf microcms:*service-domain* (microcms-service-domain)) (setf microcms:*api-key* (microcms-api-key)) +(defmacro memorize (name timeout) + (let ((origin (gensym))) + `(progn + (setf (fdefinition ',origin) (fdefinition ',name)) + (defcached (,name :timeout ,timeout) (&key query) + (,origin :query query))))) + (define-object-client about) +(memorize get-about 60) + (define-object-client work) +(memorize get-work 60) + (define-list-client blog) +(memorize get-blog-list 60) +(memorize get-blog-detail 60)