node.js – Creating GraphQl schema and resolver for given GraphQl query

I want to create a GraphQl schema and resolver function for the below GraphQL query

query ($DateFilter: Date!, $oType: String, $voyStat: VoyageVoyageStatusCodeEnum)  {
    imos {
      voyageList (query: {
                    limit: 1
                    where:
                    {
                        or : [
                            {lastUpdateGmt: {isAfter : $DateFilter}},
                            {completeDateGmt: {isAfter : $DateFilter}}
                            ]
                        and : [
                            {oprType: {is : $oType }},
                            {voyageStatusCode: {isNot : $voyStat }}
                            ]
                    }
                })  {
          vesselCode
          lastUpdateGmt
          voyageNo
          voyageStatus
          tradeAreaName
          oprType
          completeDateGmt
          commenceDateGmt
          vessel {
              vesselType
              isActive
          }
    }
  }
}

Below is the schema I have written so far

#graphql
  scalar Date

  type AristowVessel {
    vesselType: String,
    isActive: Boolean
  }

  type VoyageAristow {
    vesselCode: String
    lastUpdateGmt: String
    voyageNo: Int
    voyageStatus: String
    oprType: String
    tradeAreaName: String
    commenceDateGmt: Date
    completeDateGmt: Date
    vessel: AristowVessel
  }

  type VoyageAristowList {
    voyageList: [VoyageAristow]
  }
  
  type Query {
    imos: VoyageAristowList
  }

Below is the resolver for the above schema

const voyageAristowController = {
    Query: {
      imos: async () => {
        try {
            const voyageData: any = await voyageAristowService.getVoyageData();
            console.log("Voyage Data Response = ",voyageData);
            let vdata:any = [];
            for(let row of voyageData) {
              vdata.push({
                vesselCode: row.vslCode,
                lastUpdateGmt: row.last_update,
                voyageNo: row.voyNum,
                voyageStatus: row.vtype,
                tradeAreaName: row.lob,
                oprType: row.oprType,
                commenceDateGmt: row.commenceGmt,
                completeDateGmt: row.completeGmt,
                vessel: {
                  vesselType: "J32",
                  isActive: true
                }
              });
            }
            return { voyageList: vdata };
        } catch (err) {
            throw new Error(`Error:  - : ${err}`);
        }
    }
    }
};

And this is creating the below query

query {
  imos {
    voyageList {
      vesselCode
      lastUpdateGmt
      tradeAreaName
      voyageNo
      voyageStatus
      oprType
      completeDateGmt
      commenceDateGmt
      vessel {
        vesselType
        isActive
      }
    }
  }
}

How to write the remaining variable and filter part of the given query in my schema and resolver respectively? And how to get the query values in my imos resolver function?

The remaining part is

query: {
    limit: 1
    where:
    {
        or : [
            {lastUpdateGmt: {isAfter : $DateFilter}},
            {completeDateGmt: {isAfter : $DateFilter}}
            ]
        and : [
            {oprType: {is : $oType }},
            {voyageStatusCode: {isNot : $voyStat }}
            ]
    }
  } 

and

query ($DateFilter: Date!, $oType: String, $voyStat: VoyageVoyageStatusCodeEnum)

Read more here: Source link