This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9a60a678adb901943f427e0646d9068953e884c3
Author: Benoit Tellier <[email protected]>
AuthorDate: Mon Nov 16 14:00:14 2020 +0700

    JAMES-3440 EmailQuery Limit & Position validation should not rely on Mono
    
    Synchronous checks needs to be represented via an Either
---
 .../james/jmap/method/EmailQueryMethod.scala       | 27 +++++++++++-----------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
index b2bfb02..6c32948 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
@@ -54,19 +54,20 @@ class EmailQueryMethod @Inject() (serializer: 
EmailQuerySerializer,
   private def processRequest(mailboxSession: MailboxSession,
                              invocation: Invocation,
                              request: EmailQueryRequest,
-                             capabilities: Set[CapabilityIdentifier]): 
SMono[Invocation] =
-    searchQueryFromRequest(request, capabilities, mailboxSession)
-      .flatMap(searchQuery => 
Limit.validateRequestLimit(request.limit).map((searchQuery, _)))
-      .flatMap {
-        case (searchQuery, limit) => 
Position.validateRequestPosition(request.position)
-          .map((searchQuery, limit, _))
-      }.map {
-      case (searchQuery, limitToUse, positionToUse) => 
executeQuery(mailboxSession, request, searchQuery, positionToUse, limitToUse)
-        .map(response => Invocation(
-          methodName = methodName,
-          arguments = Arguments(serializer.serialize(response)),
-          methodCallId = invocation.methodCallId))
-    }.fold(SMono.raiseError, res => res)
+                             capabilities: Set[CapabilityIdentifier]): 
SMono[Invocation] = {
+    def validation: Either[Throwable, SMono[Invocation]] = for {
+        searchQuery <- searchQueryFromRequest(request, capabilities, 
mailboxSession)
+        limit <- Limit.validateRequestLimit(request.limit)
+        position <- Position.validateRequestPosition(request.position)
+      } yield {
+        executeQuery(mailboxSession, request, searchQuery, position, limit)
+          .map(response => Invocation(
+            methodName = methodName,
+            arguments = Arguments(serializer.serialize(response)),
+            methodCallId = invocation.methodCallId))
+      }
+    validation.fold(SMono.raiseError, res => res)
+  }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): SMono[EmailQueryRequest] = 
asEmailQueryRequest(invocation.arguments)
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to