+8
-3
lib/bookmarker/cache.ex
+8
-3
lib/bookmarker/cache.ex
···
11
11
@bookmarks_table :bookmarks_cache
12
12
@tags_table :tags_cache
13
13
@tag_bookmarks_table :tag_bookmarks_cache
14
+
@max_bookmarks 1000
14
15
15
16
# Client API
16
17
···
33
34
"""
34
35
def get_bookmarks_by_tag(tag_name) do
35
36
case :ets.lookup(@tag_bookmarks_table, tag_name) do
36
-
[{^tag_name, bookmarks}] -> bookmarks
37
+
[{^tag_name, bookmarks}] -> Enum.take(bookmarks, @max_bookmarks)
37
38
[] -> []
38
39
end
39
40
end
···
94
95
95
96
defp initialize_cache do
96
97
# Cache recent bookmarks
97
-
bookmarks = Bookmarks.list_recent_bookmarks(100)
98
+
bookmarks = Bookmarks.list_recent_bookmarks(@max_bookmarks)
98
99
:ets.insert(@bookmarks_table, {:recent, bookmarks})
99
100
100
101
# Cache all tags
···
104
105
# Cache bookmarks by tag
105
106
Enum.each(tags, fn tag ->
106
107
bookmarks = Bookmarks.list_bookmarks_by_tag(tag.name)
108
+
|> Enum.take(@max_bookmarks)
107
109
:ets.insert(@tag_bookmarks_table, {tag.name, bookmarks})
108
110
end)
109
111
end
···
116
118
:add ->
117
119
[bookmark | bookmarks]
118
120
|> Enum.sort_by(& &1.inserted_at, {:desc, NaiveDateTime})
119
-
|> Enum.take(100)
121
+
|> Enum.take(@max_bookmarks)
120
122
121
123
:update ->
122
124
bookmarks
123
125
|> Enum.map(fn b -> if b.id == bookmark.id, do: bookmark, else: b end)
124
126
|> Enum.sort_by(& &1.inserted_at, {:desc, NaiveDateTime})
127
+
|> Enum.take(@max_bookmarks)
125
128
126
129
:remove ->
127
130
bookmarks
···
145
148
:add ->
146
149
[bookmark | bookmarks]
147
150
|> Enum.sort_by(& &1.inserted_at, {:desc, NaiveDateTime})
151
+
|> Enum.take(@max_bookmarks)
148
152
149
153
:update ->
150
154
bookmarks
151
155
|> Enum.map(fn b -> if b.id == bookmark.id, do: bookmark, else: b end)
152
156
|> Enum.sort_by(& &1.inserted_at, {:desc, NaiveDateTime})
157
+
|> Enum.take(@max_bookmarks)
153
158
154
159
:remove ->
155
160
bookmarks