You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何补全指定GraphQL查询的Schema变量及Resolver过滤逻辑?

GraphQL Schema 补全与 Resolver 参数获取方案

1. 补全 Schema 定义

1.1 基础类型与枚举定义

先补全查询依赖的枚举、输入类型:

# 航程状态枚举,根据业务补充实际值
enum VoyageVoyageStatusCodeEnum {
  IN_PROGRESS
  COMPLETED
  CANCELLED
  DELAYED
}

1.2 过滤条件输入类型

定义支持and/or组合过滤的输入结构:

input VoyageWhereInput {
  # 多条件组合逻辑
  and: [VoyageWhereInput!]
  or: [VoyageWhereInput!]
  # 单个过滤字段,按需扩展
  voyageStatus: VoyageVoyageStatusCodeEnum
  orderType: String
  date: Date
}

1.3 查询字段与变量定义

补全voyageList的参数规则和查询变量:

# 带变量的查询操作
query GetVoyages(
  $DateFilter: Date!
  $oType: String
  $voyStat: VoyageVoyageStatusCodeEnum
) {
  voyageList(
    limit: Int
    where: VoyageWhereInput
  ) {
    id
    voyageStatus
    orderType
    date
    # 其他需要返回的字段
  }
}

# 根查询类型
type Query {
  voyageList(
    limit: Int
    where: VoyageWhereInput
  ): [Voyage!]!
}

# 航程实体类型
type Voyage {
  id: ID!
  voyageStatus: VoyageVoyageStatusCodeEnum!
  orderType: String
  date: Date!
}

2. IMOS Resolver 中获取参数

Resolver 函数的第二个参数args会直接接收所有查询传入的参数(包括变量映射后的过滤条件、limit等),示例代码如下:

const voyageResolvers = {
  Query: {
    voyageList: async (parent, args, context, info) => {
      // 提取limit参数,可设置默认值
      const pageLimit = args.limit || 10;
      // 提取where过滤条件
      const filterConditions = args.where;

      // 解析过滤条件,转换为IMOS服务可识别的格式
      let queryFilter = {};
      if (filterConditions) {
        // 处理OR组合条件
        if (filterConditions.or) {
          queryFilter.$or = filterConditions.or.map(cond => {
            return {
              ...(cond.voyageStatus && { voyageStatus: cond.voyageStatus }),
              ...(cond.orderType && { orderType: cond.orderType }),
              ...(cond.date && { date: cond.date })
            };
          });
        }
        // 处理AND组合条件
        if (filterConditions.and) {
          queryFilter.$and = filterConditions.and.map(cond => {
            return {
              ...(cond.voyageStatus && { voyageStatus: cond.voyageStatus }),
              ...(cond.orderType && { orderType: cond.orderType }),
              ...(cond.date && { date: cond.date })
            };
          });
        }
        // 合并单个字段过滤规则
        Object.assign(queryFilter, {
          ...(filterConditions.voyageStatus && { voyageStatus: filterConditions.voyageStatus }),
          ...(filterConditions.orderType && { orderType: filterConditions.orderType }),
          ...(filterConditions.date && { date: filterConditions.date })
        });
      }

      // 调用IMOS服务获取数据
      const result = await context.imosVoyageService.fetchVoyages({
        limit: pageLimit,
        filter: queryFilter
      });

      return result;
    }
  }
};

内容的提问来源于stack exchange,提问作者Himanshu Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:15:07