diff --git a/backend/src/app/rpc.clj b/backend/src/app/rpc.clj index 63d778a89c..02e290bade 100644 --- a/backend/src/app/rpc.clj +++ b/backend/src/app/rpc.clj @@ -64,9 +64,13 @@ (let [mdata (meta result) response (if (fn? result) (result request) - (let [result (rph/unwrap result)] - {::yres/status (::http/status mdata 200) - ::yres/headers (::http/headers mdata {}) + (let [result (rph/unwrap result) + status (::http/status mdata 200) + headers (cond-> (::http/headers mdata {}) + (yres/stream-body? result) + (assoc "content-type" "application/octet-stream"))] + {::yres/status status + ::yres/headers headers ::yres/body result}))] (-> response (handle-response-transformation request mdata) diff --git a/backend/src/app/rpc/commands/binfile.clj b/backend/src/app/rpc/commands/binfile.clj index f0fc211e46..98b2c04193 100644 --- a/backend/src/app/rpc/commands/binfile.clj +++ b/backend/src/app/rpc/commands/binfile.clj @@ -25,10 +25,10 @@ [app.rpc.commands.projects :as projects] [app.rpc.commands.teams :as teams] [app.rpc.doc :as-alias doc] + [app.rpc.helpers :as rph] [app.tasks.file-gc] [app.util.services :as sv] - [app.worker :as-alias wrk] - [yetti.response :as yres])) + [app.worker :as-alias wrk])) (set! *warn-on-reflection* true) @@ -44,7 +44,7 @@ (defn stream-export-v1 [cfg {:keys [file-id include-libraries embed-assets] :as params}] - (yres/stream-body + (rph/stream (fn [_ output-stream] (try (-> cfg @@ -59,7 +59,7 @@ (defn stream-export-v3 [cfg {:keys [file-id include-libraries embed-assets] :as params}] - (yres/stream-body + (rph/stream (fn [_ output-stream] (try (-> cfg @@ -79,16 +79,11 @@ ::sm/params schema:export-binfile} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id version file-id] :as params}] (files/check-read-permissions! pool profile-id file-id) - (fn [_] - (let [version (or version 1) - body (case (int version) - 1 (stream-export-v1 cfg params) - 2 (throw (ex-info "not-implemented" {})) - 3 (stream-export-v3 cfg params))] - - {::yres/status 200 - ::yres/headers {"content-type" "application/octet-stream"} - ::yres/body body}))) + (let [version (or version 1)] + (case (int version) + 1 (stream-export-v1 cfg params) + 2 (throw (ex-info "not-implemented" {})) + 3 (stream-export-v3 cfg params)))) ;; --- Command: import-binfile diff --git a/backend/src/app/rpc/helpers.clj b/backend/src/app/rpc/helpers.clj index a424b1f8f6..5b117b82fd 100644 --- a/backend/src/app/rpc/helpers.clj +++ b/backend/src/app/rpc/helpers.clj @@ -11,7 +11,7 @@ [app.common.data.macros :as dm] [app.http :as-alias http] [app.rpc :as-alias rpc] - [yetti.response :as-alias yres])) + [yetti.response :as yres])) ;; A utilty wrapper object for wrap service responses that does not ;; implements the IObj interface that make possible attach metadata to @@ -78,3 +78,8 @@ (let [exp (if (integer? max-age) max-age (inst-ms max-age)) val (dm/fmt "max-age=%" (int (/ exp 1000.0)))] (update response ::yres/headers assoc "cache-control" val))))) + +(defn stream + "A convenience allias for yetti.response/stream-body" + [f] + (yres/stream-body f))