diff --git a/resources/sql/queries.sql b/resources/sql/queries.sql index f3cbc86..3c7cb3b 100644 --- a/resources/sql/queries.sql +++ b/resources/sql/queries.sql @@ -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` diff --git a/src/clj/daisyproducer2/documents/versions.clj b/src/clj/daisyproducer2/documents/versions.clj index 6713563..71ea839 100644 --- a/src/clj/daisyproducer2/documents/versions.clj +++ b/src/clj/daisyproducer2/documents/versions.clj @@ -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] diff --git a/src/clj/daisyproducer2/routes/services.clj b/src/clj/daisyproducer2/routes/services.clj index 290bf92..1fc89e3 100644 --- a/src/clj/daisyproducer2/routes/services.clj +++ b/src/clj/daisyproducer2/routes/services.clj @@ -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 []}]} diff --git a/src/cljs/daisyproducer2/documents/version.cljs b/src/cljs/daisyproducer2/documents/version.cljs index ecbeec5..23c0e83 100644 --- a/src/cljs/daisyproducer2/documents/version.cljs +++ b/src/cljs/daisyproducer2/documents/version.cljs @@ -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]})}))) diff --git a/test/rest-api.http b/test/rest-api.http index 3458431..9ea699e 100644 --- a/test/rest-api.http +++ b/test/rest-api.http @@ -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