Skip to content

Commit

Permalink
Implement search in versions
Browse files Browse the repository at this point in the history
  • Loading branch information
egli committed Feb 2, 2024
1 parent d656d3b commit c57e57f
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 11 deletions.
11 changes: 11 additions & 0 deletions resources/sql/queries.sql
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@ WHERE document_id = :document_id
-- :doc retrieve all versions of a document given a `document_id`
SELECT * FROM documents_version
WHERE document_id = :document_id
ORDER BY created_at DESC
--~ (when (:limit params) "LIMIT :limit")
--~ (when (:offset params) "OFFSET :offset")

-- :name find-versions :? :*
-- :doc retrieve all versions given a `search` term, a `limit` and an `offset`
SELECT * FROM documents_version
WHERE document_id = :document_id
AND LOWER(comment) LIKE LOWER(:search)
ORDER BY created_at DESC
LIMIT :limit OFFSET :offset

-- :name get-version :? :1
-- :doc retrieve a version for given `id`
Expand Down
10 changes: 8 additions & 2 deletions src/clj/daisyproducer2/documents/versions.clj
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,14 @@
(:import [io.azam.ulidj ULID] ))

(defn get-versions
[document-id]
(db/get-versions {:document_id document-id}))
([document-id]
(db/get-versions {:document_id document-id}))
([document-id limit offset]
(db/get-versions {:document_id document-id :limit limit :offset offset})))

(defn find-versions
[document-id limit offset search]
(db/find-versions {:document_id document-id :limit limit :offset offset :search search}))

(defn get-version
[document-id id]
Expand Down
17 changes: 11 additions & 6 deletions src/clj/daisyproducer2/routes/services.clj
Original file line number Diff line number Diff line change
Expand Up @@ -298,18 +298,23 @@
{:swagger {:tags ["Versions"]}}

[""
{:get {:summary "Get all versions of a given document. If `latest` is true, return only the latest version"
{:get {:summary "Get all versions of a given document. If `latest` is true, return only the latest version. Optionally limit the result set using a `search` term, a `limit` and an `offset`."
:parameters {:path {:id int?}
:query {(spec/opt :latest) boolean?}}
:query {(spec/opt :latest) boolean?
(spec/opt :search) string?
(spec/opt :limit) int?
(spec/opt :offset) int?}}
:handler (fn [{{{:keys [id]} :path
{:keys [latest] :or {latest false}} :query} :parameters}]
{:keys [limit offset search latest]
:or {limit default-limit offset 0 latest false}} :query} :parameters}]
(if latest
(if-let [latest (versions/get-latest id)]
(ok latest)
(not-found))
(if-let [versions (not-empty (versions/get-versions id))]
(ok versions)
(not-found))))}
(let [versions (if (blank? search)
(versions/get-versions id limit offset)
(versions/find-versions id limit offset (db/search-to-sql search)))]
(ok versions))))}
:post {:summary "Create a new version for a given document"
:middleware [wrap-restricted]
:swagger {:security [{:apiAuth []}]}
Expand Down
8 changes: 5 additions & 3 deletions src/cljs/daisyproducer2/documents/version.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@
(rf/reg-event-fx
::fetch-versions
(fn [{:keys [db]} [_ document-id]]
(let [offset (pagination/offset db :versions)]
(let [offset (pagination/offset db :versions)
search (get-search db document-id)]
{:db (assoc-in db [:loading :versions] true)
:http-xhrio (as-transit
{:method :get
:uri (str "/api/documents/" document-id "/versions")
:params {:offset offset
:limit pagination/page-size}
:params (cond-> {:offset offset
:limit pagination/page-size}
(not (string/blank? search)) (assoc :search search))
:on-success [::fetch-versions-success]
:on-failure [::fetch-versions-failure]})})))

Expand Down
3 changes: 3 additions & 0 deletions test/rest-api.http
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ GET http://localhost:3000/api/documents/105/versions

GET http://localhost:3000/api/documents/105/versions?latest=false

# Search a version for a document
GET http://localhost:3000/api/documents/105/versions?search=hallo

# Get a specific version
GET http://localhost:3000/api/documents/105/versions/8212

Expand Down

0 comments on commit c57e57f

Please sign in to comment.