(defpackage #:website/lib/cms (:use #:cl) (: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) (: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) (define-object-client works) (define-list-client blog) (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)))