Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
(ns document-storage.postgres.cache
(:require [document-storage.postgres.encoding :as encoding]
[editscript.core :as escript]
[clj-helper.vector :as vhelper]
[document-storage.query :as dsquery]))
(defn get-cached-document [storage repository document-id version]
(.run-query storage :get-cached-document
{:repository repository
:document-id document-id
:version version}))
(defn cache-document [storage repository id doc]
(swap! (.get-cache storage) update-in [repository :documents] assoc id doc)
doc)
(defn cache-query [storage repository query result]
(swap! (.get-cache storage) update-in [repository :queries] assoc query (into #{} (keys result)))
result)
(defn get-cached-query [storage repository query]
(get-in (.get-cache storage) [repository :queries query]))
(defn uncache-document [storage repository id]
(swap! (.get-cache storage) update-in [repository :queries] dsquery/update-queries-remove-document id)
(swap! (.get-cache storage) update-in [repository :documents] dissoc id))
(defn update-query-cache-document [storage repository document-id document]
(swap! (.get-cache storage) update-in [repository :queries] dsquery/update-queries document-id document))
(defn load-cached-document [storage repository document-id version load-doc-fn]
(if-let [document (get-cached-document storage repository document-id version)]
(encoding/decode-document (:data document))
(let [restored-document (load-doc-fn)]
(.run-query storage :create-document-cache!
{:repository repository
:document-id document-id
:version version
:data (encoding/encode-document restored-document)})
(load-cached-document storage repository document-id version load-doc-fn))))