Resource Dictionary Loopback integration 82/85082/1
authorEzhilarasi <ezhrajam@in.ibm.com>
Thu, 11 Apr 2019 15:39:26 +0000 (21:09 +0530)
committerEzhilarasi <ezhrajam@in.ibm.com>
Thu, 11 Apr 2019 15:43:15 +0000 (21:13 +0530)
Change-Id: If1b3dbc23797e03f97deab7d67f9adb22d07bc1c
Issue-ID: CCSDK-1070
Signed-off-by: Ezhilarasi <ezhrajam@in.ibm.com>
cds-ui/server/src/controllers/data-dictionary.controller.ts [new file with mode: 0644]
cds-ui/server/src/controllers/index.ts
cds-ui/server/src/datasources/index.ts
cds-ui/server/src/datasources/resource-dictionary.datasource.json [new file with mode: 0644]
cds-ui/server/src/datasources/resource-dictionary.datasource.ts [new file with mode: 0644]
cds-ui/server/src/services/index.ts
cds-ui/server/src/services/resource-dictionary.service.ts [new file with mode: 0644]

diff --git a/cds-ui/server/src/controllers/data-dictionary.controller.ts b/cds-ui/server/src/controllers/data-dictionary.controller.ts
new file mode 100644 (file)
index 0000000..36efe6e
--- /dev/null
@@ -0,0 +1,85 @@
+// Uncomment these imports to begin using these cool features!
+
+// import {inject} from '@loopback/context';
+import {
+  post,
+  param,
+  get,
+  getFilterSchemaFor,
+  getWhereSchemaFor,
+  patch,
+  put,
+  del,
+  requestBody,
+  Request,
+  Response,
+  RestBindings,
+} from '@loopback/rest';
+import { inject } from '@loopback/core';
+import { ResourceDictionaryService } from '../services';
+
+const REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER = process.env.REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER || "Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==";
+export class DataDictionaryController {
+  constructor(
+    @inject('services.ResourceDictionaryService')
+    public rdservice: ResourceDictionaryService,
+  ) { }
+
+  @get('/resourcedictionary/{name}', {
+    responses: {
+      '200': {
+        content: { 'application/json': {} },
+      },
+    },
+  })
+  async getByName(@param.path.string('name') name: string) {
+    return await this.rdservice.getByName(name, REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER);
+  }
+  @get('/resourcedictionary/{tags}', {
+    responses: {
+      '200': {
+        content: { 'application/json': {} },
+      },
+    },
+  })
+  async getByTags(@param.path.string('tags') tags: string) {
+    return await this.rdservice.getByTags(tags, REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER);
+  }
+
+  @get('/resourcedictionary/source-mapping', {
+    responses: {
+      '200': {
+        content: { 'application/json': {} },
+      },
+    },
+  })
+  async getSourceMapping() {
+    return await this.rdservice.getSourceMapping(REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER);
+  }
+  @post('/resourcedictionary/save', {
+    responses: {
+      '200': {
+        content: { 'application/json': {} }
+      }
+    },
+  })
+  async save(@requestBody({
+    content: { 'application/json': { schema: { 'x-ts-type': JSON } } },
+    accepts: { 'application/json': { schema: { 'x-ts-type': JSON } } }
+  }) resourceDictionary: JSON): Promise<any> {
+    return await this.rdservice.save(REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER, resourceDictionary);
+  }
+  @post('/resourcedictionary/search/by-names', {
+    responses: {
+      '200': {
+        content: { 'application/json': {} }
+      }
+    },
+  })
+  async searchByNames(@requestBody({
+    content: { 'application/json': { schema: { 'x-ts-type': JSON } } },
+    accepts: { 'application/json': { schema: { 'x-ts-type': JSON } } }
+  }) resourceDictionaryList: JSON): Promise<any> {
+    return await this.rdservice.searchbyNames(REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER, resourceDictionaryList);
+  }
+}
index bf2bd6f..59f6351 100644 (file)
@@ -20,3 +20,4 @@ limitations under the License.
 */
 
 export * from './ping.controller';
+export * from './data-dictionary.controller';
index f7a934c..7ed2c91 100644 (file)
@@ -22,3 +22,4 @@ limitations under the License.
 
 export * from './db.datasource';
 export * from './blueprint.datasource';
+export * from './resource-dictionary.datasource';
diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource.json b/cds-ui/server/src/datasources/resource-dictionary.datasource.json
new file mode 100644 (file)
index 0000000..9bf5f30
--- /dev/null
@@ -0,0 +1,89 @@
+{
+    "name": "resourceDictionary",
+    "connector": "rest",
+    "baseURL": "http://localhost:8080/api/v1/dictionary",
+    "crud": false,
+    "operations": [{
+            "template": {
+                "method": "GET",
+                "url": "http://localhost:8080/api/v1/dictionary/{name}",
+                "headers": {
+                    "accepts": "application/json",
+                    "content-type": "application/json",
+                    "authorization": "{authtoken}"
+                },
+                "responsePath": "$.*"
+            },
+            "functions": {
+                "getByName": ["name", "authtoken"]
+
+            }
+        },
+        {
+            "template": {
+                "method": "GET",
+                "url": "http://localhost:8080/api/v1/dictionary/source-mapping",
+                "headers": {
+                    "accepts": "application/json",
+                    "content-type": "application/json",
+                    "authorization": "{authtoken}"
+                },
+                "responsePath": "$.*"
+            },
+            "functions": {
+                "getSourceMapping": ["authtoken"]
+
+            }
+        },
+        {
+            "template": {
+                "method": "GET",
+                "url": "http://localhost:8080/api/v1/dictionary/search/{tags}",
+                "headers": {
+                    "accepts": "application/json",
+                    "content-type": "application/json",
+                    "authorization": "{authtoken}"
+                },
+                "responsePath": "$.*"
+            },
+            "functions": {
+                "getByTags": ["tags", "authtoken"]
+
+            }
+        },
+        {
+            "template": {
+                "method": "POST",
+                "url": "http://localhost:8080/api/v1/dictionary",
+                "headers": {
+                    "accepts": "application/json",
+                    "content-type": "application/json",
+                    "authorization": "{authtoken}"
+                },
+                "body": "{resourceDictionary}",
+                "responsePath": "$.*"
+            },
+            "functions": {
+                "save": ["authtoken", "resourceDictionary"]
+
+            }
+        },
+        {
+            "template": {
+                "method": "POST",
+                "url": "http://localhost:8080/api/v1/dictionary/by-names",
+                "headers": {
+                    "accepts": "application/json",
+                    "content-type": "application/json",
+                    "authorization": "{authtoken}"
+                },
+                "body": "{resourceDictionaryList}",
+                "responsePath": "$.*"
+            },
+            "functions": {
+                "searchbyNames": ["authtoken", "resourceDictionaryList"]
+
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource.ts b/cds-ui/server/src/datasources/resource-dictionary.datasource.ts
new file mode 100644 (file)
index 0000000..381ab9a
--- /dev/null
@@ -0,0 +1,14 @@
+import {inject} from '@loopback/core';
+import {juggler} from '@loopback/repository';
+import * as config from './resource-dictionary.datasource.json';
+
+export class ResourceDictionaryDataSource extends juggler.DataSource {
+  static dataSourceName = 'resourceDictionary';
+
+  constructor(
+    @inject('datasources.config.resourceDictionary', {optional: true})
+    dsConfig: object = config,
+  ) {
+    super(dsConfig);
+  }
+}
index 26b01ed..8a82e32 100644 (file)
@@ -1 +1,2 @@
 export * from './blueprint.service';
+export * from './resource-dictionary.service';
diff --git a/cds-ui/server/src/services/resource-dictionary.service.ts b/cds-ui/server/src/services/resource-dictionary.service.ts
new file mode 100644 (file)
index 0000000..44ba1a3
--- /dev/null
@@ -0,0 +1,23 @@
+import {getService} from '@loopback/service-proxy';
+import {inject, Provider} from '@loopback/core';
+import {ResourceDictionaryDataSource} from '../datasources';
+
+export interface ResourceDictionaryService {
+  getByName(name: string, authtoken: string): Promise<JSON>;
+  getSourceMapping(authtoken: string): Promise<JSON>;
+  getByTags(tags: string, authtoken: string): Promise<JSON>;
+  save(authtoken: string, resourceDictionary: JSON): Promise<JSON>;
+  searchbyNames(authtoken: string, resourceDictionaryList: JSON): Promise<JSON>;
+}
+
+export class ResourceDictionaryServiceProvider implements Provider<ResourceDictionaryService> {
+  constructor(
+    // resourceDictionary must match the name property in the datasource json file
+    @inject('datasources.resourceDictionary')
+    protected dataSource: ResourceDictionaryDataSource = new ResourceDictionaryDataSource(),
+  ) {}
+
+  value(): Promise<ResourceDictionaryService> {
+    return getService(this.dataSource);
+  }
+}