Просмотр исходного кода

Refactor ElasticsearchDelegator to use type-safe search queries for ES7, ES8, and ES9

Shun Miyazawa 8 месяцев назад
Родитель
Сommit
9553e6e121

+ 0 - 12
apps/app/src/server/service/search-delegator/elasticsearch-client-delegator/interfaces.ts

@@ -83,15 +83,3 @@ export interface ES9SearchQuery {
 }
 }
 
 
 export type SearchQuery = ES7SearchQuery | ES8SearchQuery | ES9SearchQuery;
 export type SearchQuery = ES7SearchQuery | ES8SearchQuery | ES9SearchQuery;
-
-export const isES7SearchQuery = (clientDelegator: ElasticsearchClientDelegator, query: SearchQuery): query is ES7SearchQuery => {
-  return clientDelegator.delegatorVersion === 7;
-};
-
-export const isES8SearchQuery = (clientDelegator: ElasticsearchClientDelegator, query: SearchQuery): query is ES8SearchQuery => {
-  return clientDelegator.delegatorVersion === 8;
-};
-
-export const isES9SearchQuery = (clientDelegator: ElasticsearchClientDelegator, query: SearchQuery): query is ES9SearchQuery => {
-  return clientDelegator.delegatorVersion === 9;
-};

+ 22 - 19
apps/app/src/server/service/search-delegator/elasticsearch.ts

@@ -29,10 +29,10 @@ import {
   isES7ClientDelegator,
   isES7ClientDelegator,
   isES8ClientDelegator,
   isES8ClientDelegator,
   isES9ClientDelegator,
   isES9ClientDelegator,
-  isES7SearchQuery,
-  isES8SearchQuery,
-  isES9SearchQuery,
   type SearchQuery,
   type SearchQuery,
+  type ES7SearchQuery,
+  type ES8SearchQuery,
+  type ES9SearchQuery,
   type ElasticsearchClientDelegator,
   type ElasticsearchClientDelegator,
 } from './elasticsearch-client-delegator';
 } from './elasticsearch-client-delegator';
 
 
@@ -567,29 +567,32 @@ class ElasticsearchDelegator implements SearchDelegator<Data, ESTermsKey, ESQuer
 
 
 
 
       const validateQueryResponse = await (async() => {
       const validateQueryResponse = await (async() => {
-        if (isES7ClientDelegator(this.client) && isES7SearchQuery(this.client, query)) {
-          const { body } = query;
+        if (isES7ClientDelegator(this.client)) {
+          const es7SearchQuery = query as ES7SearchQuery;
+          const { body } = es7SearchQuery;
           return this.client.indices.validateQuery({
           return this.client.indices.validateQuery({
-            index: query.index,
-            type: query.type,
+            index: es7SearchQuery.index,
+            type: es7SearchQuery.type,
             explain: true,
             explain: true,
             ...body,
             ...body,
           });
           });
         }
         }
 
 
-        if (isES8ClientDelegator(this.client) && isES8SearchQuery(this.client, query)) {
-          const { body } = query;
+        if (isES8ClientDelegator(this.client)) {
+          const es8SearchQuery = query as ES8SearchQuery;
+          const { body } = es8SearchQuery;
           return this.client.indices.validateQuery({
           return this.client.indices.validateQuery({
-            index: query.index,
+            index: es8SearchQuery.index,
             explain: true,
             explain: true,
             ...body,
             ...body,
           });
           });
         }
         }
 
 
-        if (isES9SearchQuery(this.client, query) && isES9ClientDelegator(this.client)) {
-          const { body } = query;
+        if (isES9ClientDelegator(this.client)) {
+          const es9SearchQuery = query as ES9SearchQuery;
+          const { body } = es9SearchQuery;
           return this.client.indices.validateQuery({
           return this.client.indices.validateQuery({
-            index: query.index,
+            index: es9SearchQuery.index,
             explain: true,
             explain: true,
             ...body,
             ...body,
           });
           });
@@ -604,16 +607,16 @@ class ElasticsearchDelegator implements SearchDelegator<Data, ESTermsKey, ESQuer
     }
     }
 
 
     const searchResponse = await (async() => {
     const searchResponse = await (async() => {
-      if (isES7ClientDelegator(this.client) && isES7SearchQuery(this.client, query)) {
-        return this.client.search(query);
+      if (isES7ClientDelegator(this.client)) {
+        return this.client.search(query as ES7SearchQuery);
       }
       }
 
 
-      if (isES8ClientDelegator(this.client) && isES8SearchQuery(this.client, query)) {
-        return this.client.search(query);
+      if (isES8ClientDelegator(this.client)) {
+        return this.client.search(query as ES8SearchQuery);
       }
       }
 
 
-      if (isES9ClientDelegator(this.client) && isES9SearchQuery(this.client, query)) {
-        const { body, ...rest } = query;
+      if (isES9ClientDelegator(this.client)) {
+        const { body, ...rest } = query as ES9SearchQuery;
         return this.client.search({
         return this.client.search({
           ...rest,
           ...rest,
           // Elimination of the body property since ES9
           // Elimination of the body property since ES9