]> git.frustrated-labs.net Git - larousseapi/commitdiff
feat: fetch defs/translations in parallel and url encode word param
authorAlexander Goussas <[email protected]>
Tue, 2 Jun 2026 16:31:27 +0000 (11:31 -0500)
committerAlexander Goussas <[email protected]>
Tue, 2 Jun 2026 16:31:27 +0000 (11:31 -0500)
src/main/java/net/frustratedfunctor/ui/UiResource.java

index 00e688daa42952db4576bacef8a412eed60eef19..06b07e7d3161348ba98c338c9063ebd9d0d864b7 100644 (file)
@@ -11,12 +11,19 @@ import jakarta.ws.rs.core.MediaType;
 import net.frustratedfunctor.definitions.WordDefinitionService;
 import net.frustratedfunctor.translations.WordTranslationService;
 
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 @Path("/ui")
 public class UiResource {
 
     private final WordDefinitionService definitions;
     private final WordTranslationService translations;
 
+    private static final ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor();
+
     @Location("pub/index.html")
     Template index;
 
@@ -31,11 +38,12 @@ public class UiResource {
     public TemplateInstance getTranslationsDefinitions(
             @FormParam("word") String word,
             @FormParam("lang") String lang
-    ) {
-        final var data = new WordTranslationsDefinitions(
-                translations.translate(word).translations(),
-                definitions.define(word, lang).definitions()
-        );
+    ) throws Exception {
+        final var encodedWord = URLEncoder.encode(word, StandardCharsets.UTF_8);
+        final var f1 = exec.submit(() -> translations.translate(encodedWord).translations());
+        final var f2 = exec.submit(() -> definitions.define(encodedWord, lang).definitions());
+        // TODO: Handle error
+        final var data = new WordTranslationsDefinitions(f1.get(), f2.get());
         return index.data("translationsDefinitions", data);
     }