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
