Simplify the approach for return streamable body

Removing unnecesary syntax overhead with simplier abstraction
This commit is contained in:
Andrey Antukh 2025-11-03 19:58:27 +01:00
parent 8307b699bf
commit cbae3dca34
3 changed files with 22 additions and 18 deletions

View File

@ -64,9 +64,13 @@
(let [mdata (meta result) (let [mdata (meta result)
response (if (fn? result) response (if (fn? result)
(result request) (result request)
(let [result (rph/unwrap result)] (let [result (rph/unwrap result)
{::yres/status (::http/status mdata 200) status (::http/status mdata 200)
::yres/headers (::http/headers mdata {}) headers (cond-> (::http/headers mdata {})
(yres/stream-body? result)
(assoc "content-type" "application/octet-stream"))]
{::yres/status status
::yres/headers headers
::yres/body result}))] ::yres/body result}))]
(-> response (-> response
(handle-response-transformation request mdata) (handle-response-transformation request mdata)

View File

@ -25,10 +25,10 @@
[app.rpc.commands.projects :as projects] [app.rpc.commands.projects :as projects]
[app.rpc.commands.teams :as teams] [app.rpc.commands.teams :as teams]
[app.rpc.doc :as-alias doc] [app.rpc.doc :as-alias doc]
[app.rpc.helpers :as rph]
[app.tasks.file-gc] [app.tasks.file-gc]
[app.util.services :as sv] [app.util.services :as sv]
[app.worker :as-alias wrk] [app.worker :as-alias wrk]))
[yetti.response :as yres]))
(set! *warn-on-reflection* true) (set! *warn-on-reflection* true)
@ -44,7 +44,7 @@
(defn stream-export-v1 (defn stream-export-v1
[cfg {:keys [file-id include-libraries embed-assets] :as params}] [cfg {:keys [file-id include-libraries embed-assets] :as params}]
(yres/stream-body (rph/stream
(fn [_ output-stream] (fn [_ output-stream]
(try (try
(-> cfg (-> cfg
@ -59,7 +59,7 @@
(defn stream-export-v3 (defn stream-export-v3
[cfg {:keys [file-id include-libraries embed-assets] :as params}] [cfg {:keys [file-id include-libraries embed-assets] :as params}]
(yres/stream-body (rph/stream
(fn [_ output-stream] (fn [_ output-stream]
(try (try
(-> cfg (-> cfg
@ -79,16 +79,11 @@
::sm/params schema:export-binfile} ::sm/params schema:export-binfile}
[{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id version file-id] :as params}] [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id version file-id] :as params}]
(files/check-read-permissions! pool profile-id file-id) (files/check-read-permissions! pool profile-id file-id)
(fn [_] (let [version (or version 1)]
(let [version (or version 1) (case (int version)
body (case (int version) 1 (stream-export-v1 cfg params)
1 (stream-export-v1 cfg params) 2 (throw (ex-info "not-implemented" {}))
2 (throw (ex-info "not-implemented" {})) 3 (stream-export-v3 cfg params))))
3 (stream-export-v3 cfg params))]
{::yres/status 200
::yres/headers {"content-type" "application/octet-stream"}
::yres/body body})))
;; --- Command: import-binfile ;; --- Command: import-binfile

View File

@ -11,7 +11,7 @@
[app.common.data.macros :as dm] [app.common.data.macros :as dm]
[app.http :as-alias http] [app.http :as-alias http]
[app.rpc :as-alias rpc] [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 ;; A utilty wrapper object for wrap service responses that does not
;; implements the IObj interface that make possible attach metadata to ;; 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)) (let [exp (if (integer? max-age) max-age (inst-ms max-age))
val (dm/fmt "max-age=%" (int (/ exp 1000.0)))] val (dm/fmt "max-age=%" (int (/ exp 1000.0)))]
(update response ::yres/headers assoc "cache-control" val))))) (update response ::yres/headers assoc "cache-control" val)))))
(defn stream
"A convenience allias for yetti.response/stream-body"
[f]
(yres/stream-body f))