Няма описание

Stephen Wong 44c768af50 check url is not null преди 1 година
environment df4f249e24 updated distributed query module - part2 преди 2 години
public f4f8b695e3 added graphql and jade преди 2 години
scratch ba8350f0ea login and logout преди 2 години
src 44c768af50 check url is not null преди 1 година
test 0b033f972a first commit преди 3 години
views 04f498fe8f support large response преди 1 година
.env c30caa5fa8 added header jade преди 1 година
.eslintrc.js 0b033f972a first commit преди 3 години
.gitignore 0b033f972a first commit преди 3 години
.gitmodules 07010f098d Domain proxy integration + login fix преди 1 година
.prettierrc 0b033f972a first commit преди 3 години
README.md d682919acf Domain proxy integration + login fix преди 1 година
codegen.yml 29a9a37f66 add graphql codegen преди 2 години
nest-cli.json 0b033f972a first commit преди 3 години
package-lock.json 2f2d9004ad Updated package and fix setting for start. преди 1 година
package.json ba9233453d Updated package setting. преди 1 година
schema.gql 29a9a37f66 add graphql codegen преди 2 години
tsconfig.build.json 0b033f972a first commit преди 3 години
tsconfig.json a3cca0b121 added graphql and jade преди 2 години

README.md

Microservice - CQRS with GraphQL and SubscriberProxy

OVERVIEW

The role for microservice - CQRS is responsible to handle the request and response in between client and graphQL server. It's also manipulate the standard fisApp request/response.

FisApp API is the main way to request and response the data. The data can be consist of Account Profile, Invoice,

REQUEST

NOTE: PAYLOAD will be graphQL QUERY

Method 1 - DataService Request (HTTP API)

Request without fisApp header(simplified request)

HTTP API POST Request

 POST   http://swopt.com:3011/api/request

POST Request DATA - RAW JSON(application/json)

Header

{
  "header": {
    "messageType": "Query",
    "messageID": "942ecfe2-8734-4cff-998e-6a2a5a39c464",
    "messageName": "Query",
    "dateCreated": "2022-03-11T02:19:50.923Z",
    "isAggregate": false,
    "messageProducerInformation": {
      "origin": {
        "userApplication": {
          "userAppId": "getQueryMessage",
          "userAppName": "Client"
        }
      },
      "components": "Presentation"
    },
    "security": {
      "ucpId": "ABC"
    },
    "messageDataLocation": {
      "isEmbaded": true
    },
    "messageDataFormat": {
      "dataFormat": "Json"
    },
    "requestExecutionMode": 0,
    "resquestTimeOut": 0,
    "query": "General"
  }
}
Payload

query demo{
        APAccountProfileQuery{
          SummaryResponse{
            __typename
            returnFormatType
          }
          StatusResponse{
            __typename
            status
          }
          APAccountProfileMessage{
            __typename
            data{
              acct_id
              acct_no
            }
          }
        }
      }
SAMPLE - Header with Payload

{
    header: '{  "header": {    "messageType": "Query",    "messageID": "942ecfe2-8734-4cff-998e-6a2a5a39c464",    "messageName": "Query",    "dateCreated": "2022-03-11T02:19:50.923Z",    "isAggregate": false,    "messageProducerInformation": {      "origin": {        "userApplication": {
      "userAppId": "getQueryMessage",          "userAppName": "Client"        }      },      "components": "Presentation"    },    "security": {
    "ucpId": "ABC"    },    "messageDataLocation": {      "isEmbaded": true    },    "messageDataFormat": {      "dataFormat": "Json"    },    "requestExecutionMode": 0,    "resquestTimeOut": 0,    "query": "General"  }}',
    payload: 'query APAccountProfile {            APAccountProfile {              className              filter              returnFormatType
         returnSequenceTotal              returnSequenceNumber              data {                acct_id                acct_no                acct_name                acct_type              }            }          }'
  }


Method 2 - fisApp Dataservice request (HTTP API)

Request without login

 POST   http://swopt.com:3011/api/default

Request with login

 POST   http://swopt.com:3011/request

Request with fisApp header

{
  "header": {
    "messageType": "Query",
    "messageID": "942ecfe2-8734-4cff-998e-6a2a5a39c464",
    "messageName": "Query",
    "dateCreated": "2022-03-11T02:19:50.923Z",
    "isAggregate": false,
    "messageProducerInformation": {
      "origin": {
        "userApplication": {
          "userAppId": "getQueryMessage",
          "userAppName": "Client"
        }
      },
      "components": "Presentation"
    },
    "security": {
      "ucpId": "ABC"
    },
    "messageDataLocation": {
      "isEmbaded": true
    },
    "messageDataFormat": {
      "dataFormat": "Json"
    },
    "requestExecutionMode": 0,
    "resquestTimeOut": 0,
    "query": "General"
  },
  "data":{
      "payload": "query demo { APAccountProfileQuery {    SummaryResponse{  __typename  returnFormatType }    StatusResponse {  __typename  status }     APAccountProfileMessage{  data { acct_id acct_no acct_name acct_type   } } } } "
  }
}

Method 3 - HTTP Playground with graphQL API request

Access to below url is to play around the request and response. left textarea is to paste in the fisApp with header(example as below), the response will be shown in the right textarea column.

 GET   http://swopt.com:3011/graphqlapi

Default dataservice REQUEST:

{
  "header": {
    "messageType": "Query",
    "messageID": "942ecfe2-8734-4cff-998e-6a2a5a39c464",
    "messageName": "Query",
    "dateCreated": "2022-03-11T02:19:50.923Z",
    "isAggregate": false,
    "messageProducerInformation": {
      "origin": {
        "userApplication": {
          "userAppId": "getQueryMessage",
          "userAppName": "Client"
        }
      },
      "components": "Presentation"
    },
    "security": {
      "ucpId": "ABC"
    },
    "messageDataLocation": {
      "isEmbaded": true
    },
    "messageDataFormat": {
      "dataFormat": "Json"
    },
    "requestExecutionMode": 0,
    "resquestTimeOut": 0,
    "query": "General"
  },
  "data":{
      "payload": "query demo { APAccountProfileQuery {    SummaryResponse{  __typename  returnFormatType }    StatusResponse {  __typename  status }     APAccountProfileMessage{  data { acct_id acct_no acct_name acct_type   } } } } "
  }
}

DEFINITION - DATASERVICE

Property Type Description
className String REQUIRED: define which dataservice data want to retrieve
filter String OPTIONAL : The filter for the getData function will be in key=value; key=value; pair format where key refers to column name.
returnFormatType String OPTIONAL: byRow , byBatchOf5, byBatchOf10 or full

SAMPLE GRAPHQL SCHEMA

query
    dataservice($className: String!,
                $filter: String!,
                $returnFormatType: String!)
    {
        dataservice(className: $className,
                    filter: $filter,
                    returnFormatType: $returnFormatType)
                    {
                        filter,
                        className,
                        returnFormatType,
                        returnSequenceTotal,
                        returnSequenceNumber,
                        data

                    }
    }

SAMPLE REQUEST

    "data": {
        "type": "dataservice",
        "className": "APAccountProfileDataService",
        "returnFormatType": "byRow"
    }

========================================================

RESPONSE

type DataService {
    className: String!
    data: String!
    filter: String!
    returnFormatType: String!
    returnSequenceNumber: Float!
    returnSequenceTotal: Float!
}
Property Description
classname same as request className
data responsed data
filter same as request
returnFormatType same as requested returnFormatType
returnSequenceTotal refer to the total number of responses
returnSequenceNumber refer to the response number start from 1 to total number of response.

SETUP GUIDE

GraphQL Codegen

GraphQL codegen is to generate the code from Graphql schema to typescript code.

# to run the graphql codegen
npm run generate

# typescript code will be generated/updated at:
.../src/generated/graphql.ts

========================================================

Installation

$ npm install

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod


Tips

Fix : Filename too long

git config --system core.longpaths true
git submodule sync --recursive
git submodule deinit --all -f
git submodule update --init --recursive