diff --git a/backend/src/uxbox/services/init.clj b/backend/src/uxbox/services/init.clj index 3a46deed7..c83b9e931 100644 --- a/backend/src/uxbox/services/init.clj +++ b/backend/src/uxbox/services/init.clj @@ -22,7 +22,7 @@ (require 'uxbox.services.queries.pages) (require 'uxbox.services.queries.profile) (require 'uxbox.services.queries.recent-files) - (require 'uxbox.services.queries.view) + (require 'uxbox.services.queries.viewer) ) (defn- load-mutation-services @@ -35,7 +35,6 @@ (require 'uxbox.services.mutations.files) (require 'uxbox.services.mutations.pages) (require 'uxbox.services.mutations.profile) - ;; (require 'uxbox.services.mutations.user-attrs) ) (defstate query-services diff --git a/backend/src/uxbox/services/queries/view.clj b/backend/src/uxbox/services/queries/viewer.clj similarity index 64% rename from backend/src/uxbox/services/queries/view.clj rename to backend/src/uxbox/services/queries/viewer.clj index ee6c0f608..5e7f24e85 100644 --- a/backend/src/uxbox/services/queries/view.clj +++ b/backend/src/uxbox/services/queries/viewer.clj @@ -7,7 +7,7 @@ ;; ;; Copyright (c) 2020 UXBOX Labs SL -(ns uxbox.services.queries.view +(ns uxbox.services.queries.viewer (:require [clojure.spec.alpha :as s] [promesa.core :as p] @@ -31,7 +31,7 @@ (s/def ::id ::us/uuid) (s/def ::page-id ::us/uuid) -;; --- Query: Viewer Bundle +;; --- Query: Viewer Bundle (by Page ID) (def ^:private sql:project @@ -52,16 +52,41 @@ (db/with-atomic [conn db/pool] (p/let [page (pages/retrieve-page conn page-id) file (files/retrieve-file conn (:file-id page)) - users (files/retrieve-file-users conn (:file-id page)) images (files/retrieve-file-images conn page) project (retrieve-project conn (:project-id file))] (files/check-edition-permissions! conn profile-id (:file-id page)) {:page page :file file - :users users :images images :project project}))) -;; TODO: bundle by share link +;; --- Query: Viewer Bundle (By Share ID) + +(declare retrieve-page-by-share-id) + +(s/def ::viewer-bundle-by-share-id + (s/keys :req-un [::share-id] + :opt-un [::profile-id])) + +(sq/defquery ::viewer-bundle-by-share-id + [{:keys [share-id]}] + (db/with-atomic [conn db/pool] + (p/let [page (retrieve-page-by-share-id conn share-id) + file (files/retrieve-file conn (:file-id page)) + images (files/retrieve-file-images conn page) + project (retrieve-project conn (:project-id file))] + {:page page + :file file + :images images + :project project}))) + +(def ^:private sql:page-by-share-id + "select p.* from page as p where share_id=$1") + +(defn- retrieve-page-by-share-id + [conn share-id] + (-> (db/query-one conn [sql:page-by-share-id share-id]) + (p/then' su/raise-not-found-if-nil) + (p/then' pages/decode-row)))