Skip to content

Commit 94e82f5

Browse files
authored
add update collection (#41)
1 parent 7a07610 commit 94e82f5

File tree

5 files changed

+178
-72
lines changed

5 files changed

+178
-72
lines changed

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,36 @@ The examples displays the creation of collection named `companies`.
7676
:token_separators []}
7777
```
7878

79+
### Update collection
80+
81+
The different `types` for the schema can be found [here](https://typesense.org/docs/0.24.0/api/collections.html#update-or-alter-a-collection).
82+
83+
The examples shows updating the collection named named `companies` with a new field `year_founded`.
84+
85+
```clojure
86+
(update-collection!
87+
settings
88+
"companies"
89+
{:fields [{:name "year_founded"
90+
:type "int32"
91+
:optional true}]})
92+
93+
;; Example success response =>
94+
{:fields
95+
[{:infix false
96+
:index true
97+
:locale ""
98+
:name "year_founded"
99+
:nested false
100+
:nested_array 0
101+
:facet false
102+
:type "int32"
103+
:num_dim 0
104+
:optional true
105+
:vec_dist "cosine"
106+
:sort true}]}
107+
```
108+
79109
### Delete collection
80110

81111
Permanently drops a collection on the `collection-name`. This action cannot be undone.

src/typesense/api.clj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@
5959
"Content-Type" "application/json"}
6060
:body (json/write-str schema)}})
6161

62+
(defn update-collection-req
63+
[{:keys [uri key]} collection-name update-schema]
64+
{:uri (collection-uri uri collection-name)
65+
:req {:headers {api-key-header-name key
66+
"Content-Type" "application/json"}
67+
:body (json/write-str update-schema)}})
68+
6269
(defn drop-collection-req
6370
[{:keys [uri key]} collection-name]
6471
{:uri (collection-uri uri collection-name)

src/typesense/client.clj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@
3232
(let [{:keys [uri req]} (api/create-collection-req settings schema)]
3333
(util/http-response-json->map (http/post uri req)))))
3434

35+
(defn update-collection!
36+
"Update collection on name using the supplied update-schema."
37+
[settings collection-name update-schema]
38+
(try-typesense-api
39+
(let [{:keys [uri req]} (api/update-collection-req settings collection-name update-schema)]
40+
(util/http-response-json->map (http/patch uri req)))))
41+
3542
(defn delete-collection!
3643
"Permanently drops a collection. This action cannot be undone.
3744
For large collections, this might have an impact on read latencies."

test/typesense/api_test.clj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@
2020
:body (json/write-str schema)}}]
2121
(is (= exp req))))
2222

23+
(deftest update-collection-req-test
24+
(let [collection-name "test_collection"
25+
update-schema {:fields [{:name "test_name" :drop true}
26+
{:name "new_field"
27+
:type "string"
28+
:facet false
29+
:optional true}]}
30+
req (sut/update-collection-req settings collection-name update-schema)
31+
exp {:uri "http://localhost:8108/collections/test_collection"
32+
:req {:headers {"X-TYPESENSE-API-KEY" "key"
33+
"Content-Type" "application/json"}
34+
:body (json/write-str update-schema)}}]
35+
(is (= exp req))))
36+
2337
(deftest drop-collection-req-test
2438
(let [req (sut/drop-collection-req settings "test_collection")
2539
exp {:uri "http://localhost:8108/collections/test_collection"

test/typesense/client_test.clj

Lines changed: 120 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -87,33 +87,63 @@
8787
;; We remove :created_at it cannot be asserted since it changes each run.
8888
(is (= expected (dissoc response :created_at)))))
8989

90+
(testing "Update collection"
91+
(let [expected {:fields
92+
[{:infix false
93+
:index true
94+
:locale ""
95+
:name "year_founded"
96+
:nested false
97+
:nested_array 0
98+
:facet false
99+
:type "int32"
100+
:num_dim 0
101+
:optional true
102+
:vec_dist "cosine"
103+
:sort true}]}
104+
collection-name "companies_collection_test"
105+
update-schema {:fields [{:name "year_founded"
106+
:type "int32"
107+
:optional true}]}
108+
response (sut/update-collection! settings collection-name update-schema)]
109+
(is (= expected response))))
110+
90111
(testing "List collections"
91112
(let [expected [{:default_sorting_field "num_employees"
92113
:enable_nested_fields false
93-
:fields [{:facet false
94-
:index true
95-
:name "company_name"
96-
:optional false
97-
:type "string"
98-
:infix false
99-
:locale ""
100-
:sort false}
101-
{:facet false
102-
:index true
103-
:name "num_employees"
104-
:optional false
105-
:type "int32"
106-
:infix false
107-
:locale ""
108-
:sort true}
109-
{:facet true
110-
:index true
111-
:name "country"
112-
:optional false
113-
:type "string"
114-
:infix false
115-
:locale ""
116-
:sort false}]
114+
:fields
115+
[{:facet false
116+
:index true
117+
:infix false
118+
:locale ""
119+
:name "company_name"
120+
:optional false
121+
:sort false
122+
:type "string"}
123+
{:facet false
124+
:index true
125+
:infix false
126+
:locale ""
127+
:name "num_employees"
128+
:optional false
129+
:sort true
130+
:type "int32"}
131+
{:facet true
132+
:index true
133+
:infix false
134+
:locale ""
135+
:name "country"
136+
:optional false
137+
:sort false
138+
:type "string"}
139+
{:facet false
140+
:index true
141+
:infix false
142+
:locale ""
143+
:name "year_founded"
144+
:optional true
145+
:sort true
146+
:type "int32"}]
117147
:name "companies_collection_test"
118148
:num_documents 0
119149
:symbols_to_index []
@@ -127,30 +157,39 @@
127157
(testing "Retrieve collection"
128158
(let [expected {:default_sorting_field "num_employees"
129159
:enable_nested_fields false
130-
:fields [{:facet false
131-
:index true
132-
:infix false
133-
:locale ""
134-
:name "company_name"
135-
:optional false
136-
:sort false
137-
:type "string"}
138-
{:facet false
139-
:index true
140-
:infix false
141-
:locale ""
142-
:name "num_employees"
143-
:optional false
144-
:sort true
145-
:type "int32"}
146-
{:facet true
147-
:index true
148-
:infix false
149-
:locale ""
150-
:name "country"
151-
:optional false
152-
:sort false
153-
:type "string"}]
160+
:fields
161+
[{:facet false
162+
:index true
163+
:infix false
164+
:locale ""
165+
:name "company_name"
166+
:optional false
167+
:sort false
168+
:type "string"}
169+
{:facet false
170+
:index true
171+
:infix false
172+
:locale ""
173+
:name "num_employees"
174+
:optional false
175+
:sort true
176+
:type "int32"}
177+
{:facet true
178+
:index true
179+
:infix false
180+
:locale ""
181+
:name "country"
182+
:optional false
183+
:sort false
184+
:type "string"}
185+
{:facet false
186+
:index true
187+
:infix false
188+
:locale ""
189+
:name "year_founded"
190+
:optional true
191+
:sort true
192+
:type "int32"}]
154193
:name "companies_collection_test"
155194
:num_documents 0
156195
:symbols_to_index []
@@ -163,30 +202,39 @@
163202
(testing "Delete collection"
164203
(let [expected {:default_sorting_field "num_employees"
165204
:enable_nested_fields false
166-
:fields [{:facet false
167-
:index true
168-
:name "company_name"
169-
:optional false
170-
:type "string"
171-
:infix false
172-
:locale ""
173-
:sort false}
174-
{:facet false
175-
:index true
176-
:name "num_employees"
177-
:optional false
178-
:type "int32"
179-
:infix false
180-
:locale ""
181-
:sort true}
182-
{:facet true
183-
:index true
184-
:name "country"
185-
:optional false
186-
:type "string"
187-
:infix false
188-
:locale ""
189-
:sort false}]
205+
:fields
206+
[{:facet false
207+
:index true
208+
:infix false
209+
:locale ""
210+
:name "company_name"
211+
:optional false
212+
:sort false
213+
:type "string"}
214+
{:facet false
215+
:index true
216+
:infix false
217+
:locale ""
218+
:name "num_employees"
219+
:optional false
220+
:sort true
221+
:type "int32"}
222+
{:facet true
223+
:index true
224+
:infix false
225+
:locale ""
226+
:name "country"
227+
:optional false
228+
:sort false
229+
:type "string"}
230+
{:facet false
231+
:index true
232+
:infix false
233+
:locale ""
234+
:name "year_founded"
235+
:optional true
236+
:sort true
237+
:type "int32"}]
190238
:name "companies_collection_test"
191239
:num_documents 0
192240
:symbols_to_index []

0 commit comments

Comments
 (0)