Skip to content

Commit ecaafdd

Browse files
committed
Added option for forwarding upload request
1 parent e271fa5 commit ecaafdd

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

adapters/quick/src/main/scala/caliban/QuickAdapter.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@ import zio.http.netty.NettyConfig
77
import zio.http.netty.NettyConfig.LeakDetectionLevel
88
import zio.stacktracer.TracingImplicits.disableAutoTrace
99

10-
final class QuickAdapter[R] private (requestHandler: QuickRequestHandler[R]) {
10+
final class QuickAdapter[R] private (requestHandler: QuickRequestHandler[R], forwardUploadRequest: Boolean) {
1111

1212
private implicit val trace: Trace = Trace.empty
1313

1414
/**
1515
* Converts this adapter to a [[QuickHandlers]] which contains [[zio.http.RequestHandler]]s for manually constructing zio-http routes
1616
*/
1717
val handlers: QuickHandlers[R] = QuickHandlers(
18-
api = Handler.fromFunctionZIO[Request](requestHandler.handleHttpRequest),
18+
api = Handler.fromFunctionZIO[Request](requestHandler.handleHttpRequest(forwardUploadRequest)),
1919
upload = Handler.fromFunctionZIO[Request](requestHandler.handleUploadRequest),
2020
webSocket = Handler.fromFunctionZIO[Request](requestHandler.handleWebSocketRequest)
2121
)
2222

2323
@deprecated("Use `handlers` instead", "2.5.0")
2424
lazy val handler: RequestHandler[R, Nothing] =
25-
Handler.fromFunctionZIO[Request](requestHandler.handleHttpRequest)
25+
Handler.fromFunctionZIO[Request](requestHandler.handleHttpRequest(forwardUploadRequest))
2626

2727
/**
2828
* Converts this adapter to a `Routes` serving the GraphQL API at the specified path.
@@ -93,8 +93,8 @@ final class QuickAdapter[R] private (requestHandler: QuickRequestHandler[R]) {
9393
object QuickAdapter {
9494
type Configurator[-R] = URIO[R & Scope, Unit]
9595

96-
def apply[R](interpreter: GraphQLInterpreter[R, Any]): QuickAdapter[R] =
97-
new QuickAdapter(new QuickRequestHandler(interpreter, quick.WebSocketConfig.default))
96+
def apply[R](interpreter: GraphQLInterpreter[R, Any], forwardUploadRequest: Boolean = false): QuickAdapter[R] =
97+
new QuickAdapter(new QuickRequestHandler(interpreter, quick.WebSocketConfig.default), forwardUploadRequest)
9898

9999
def handlers[R](implicit tag: Tag[R], trace: Trace): URIO[QuickAdapter[R], QuickHandlers[R]] =
100100
ZIO.serviceWith(_.handlers)

adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,25 @@ final private class QuickRequestHandler[R](
4242
def configureWebSocket[R1](config: quick.WebSocketConfig[R1]): QuickRequestHandler[R & R1] =
4343
new QuickRequestHandler[R & R1](interpreter, config)
4444

45-
def handleHttpRequest(request: Request)(implicit trace: Trace): URIO[R, Response] = ZIO.suspendSucceed {
46-
transformHttpRequest(request)
47-
.flatMap(executeRequest(request.method, _))
48-
.foldZIO(
49-
Exit.succeed,
50-
resp => Exit.succeed(transformResponse(request, resp))
45+
def handleHttpRequest(forwardUploadRequests: Boolean = false)(request: Request)(implicit
46+
trace: Trace
47+
): URIO[R, Response] =
48+
if (
49+
forwardUploadRequests && request.headers.exists(
50+
_.renderedValue.contains(MediaType.multipart.`form-data`.fullType)
5151
)
52-
}
52+
) {
53+
handleUploadRequest(request)
54+
} else {
55+
ZIO.suspendSucceed {
56+
transformHttpRequest(request)
57+
.flatMap(executeRequest(request.method, _))
58+
.foldZIO(
59+
Exit.succeed,
60+
resp => Exit.succeed(transformResponse(request, resp))
61+
)
62+
}
63+
}
5364

5465
def handleUploadRequest(request: Request)(implicit trace: Trace): URIO[R, Response] = ZIO.suspendSucceed {
5566
transformUploadRequest(request).flatMap { case (req, fileHandle) =>

0 commit comments

Comments
 (0)