Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Graphql Scala中的服务器端分页_Mysql_Scala_Graphql_Sangria - Fatal编程技术网

Mysql Graphql Scala中的服务器端分页

Mysql Graphql Scala中的服务器端分页,mysql,scala,graphql,sangria,Mysql,Scala,Graphql,Sangria,我需要在scala中用graphql进行服务器端分页。我有七个报告,使用了一个带有不同操作的graphql查询来获取数据。现在我需要添加服务器端分页,但我不能这样做。任何帮助都将不胜感激。以下是我的代码: 模式: val PanelNominationStatusReportDataType = ObjectType( "PanelNominationStatus", "Dashboard Reports", fields[Unit, PanelRewardSatusDe

我需要在scala中用graphql进行服务器端分页。我有七个报告,使用了一个带有不同操作的graphql查询来获取数据。现在我需要添加服务器端分页,但我不能这样做。任何帮助都将不胜感激。以下是我的代码:

模式:

val PanelNominationStatusReportDataType = ObjectType(
    "PanelNominationStatus",
    "Dashboard Reports",
    fields[Unit, PanelRewardSatusDetail](
      Field("awardName", OptionType(StringType), resolve = _.value.awardName),
      Field("nominatorEmail", OptionType(StringType), resolve = _.value.nominatorEmail),
      Field("nomineeEmail", OptionType(StringType), resolve = _.value.nomineeEmail),
      Field("nomineeLocation", OptionType(StringType), resolve = _.value.nomineeLocation),
      Field("approverEmail", OptionType(StringType), resolve = _.value.approverEmail),
      Field("citation", OptionType(StringType), resolve = _.value.citation),
      Field("businessJustification", OptionType(StringType), resolve = _.value.businessJustification),
      Field("rating", OptionType(IntType), resolve = _.value.rating),
      Field("votingStatus", OptionType(StringType), resolve = _.value.votingStatus),
      Field("nominatedDate", OptionType(StringType), resolve = _.value.nominatedDate),
      Field("approvedDate", OptionType(StringType), resolve = _.value.approvedDate)
    )
  )
Graphql查询:

 Field(
        "PanelNominationStatus",
        ListType(PanelNominationStatusReportDataType),
        description = Some("Returns the Employee Reward Report Data"),
        arguments = companyIdType :: rewardNamesType :: startDateType :: endDateType :: Nil,
        resolve = { c =>
          c.ctx.getPanelStatusReport(c.arg(companyIdType), c.arg(startDateType), c.arg(endDateType), c.arg(rewardNamesType))
        })
DataRepo:

  def getPanelStatusReport(companyId: Int, startDate: Long, endDate: Long, rewardNames: Seq[String]): List[PanelRewardSatusDetail] = {
    val redemptionReport = Await.result(reportsModel.findPanelRewardStatusDetailsReport(companyId, rewardNames, startDate, endDate), 20.seconds).toList
    redemptionReport
  }
最后,模型:

  def findPanelRewardStatusDetailsReport(companyId: Int, rewardNames: Seq[String], startDate: Long, endDate: Long): Future[Seq[PanelRewardSatusDetail]] = {
    val df = new SimpleDateFormat("dd-MM-yyyy")
    val start = stringToDateTime(df.format(startDate * 1000L), None).toDateTime()
    val end = stringToDateTime(df.format(endDate * 1000L), None).toDateTime()
    val rewardFilter = if(rewardNames.nonEmpty) "AND vrrc.reward_name IN (" + rewardNames.map(a => "'" + a + "'").mkString(",") + ")" else ""
    implicit val getOrdersResult = GetResult(r => PanelRewardSatusDetail(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<, r.<<))
    val q = sql"""select vrrc.reward_name, (select login from users where id=vrur.sender_id), (select login from users where id=vrur.receiver_ids), (select city_name from cities where id=(select city_id from users where id=vrur.receiver_ids)), (select login from users where id=approver_user_id), vrur.comment, vrur.business_justification, vrpa.rating, CASE WHEN vrpa.is_approved = 1 THEN 'VOTED' ELSE 'NOT VOTED' END, date(vrpa.created_at), date(vrpa.approved_at) from vr_panel_approval vrpa inner join vr_user_reward vrur on vrur.id=vrpa.user_reward_id inner join vr_reward_config vrrc on vrrc.id=vrur.reward_config_id where vrrc.company_id = $companyId and date(vrpa.created_at) between date($start) and date($end) #$rewardFilter"""
    db.run(q.as[PanelRewardSatusDetail])
  }

我可以在查询中使用limit并在查询中接受它,但我还需要在响应中发送行总数。但我无法确定在架构中的何处进行更改。

您只需要为结果定义另一个GraphQL类型,该类型也包含计数

val PanelNominationStatusResultType = ObjectType(
  "PanelNominationStatusResult",
  "Dashboard Reports",
  fields[Unit, List[PanelRewardSatusDetail]](
    Field(
      "count",
      IntType,
      description = Some("count of nomination-status-reports in this response"),
      resolve = _.value.length
    ),
    Field(
      "panelNominationStatusList",
      ListType(PanelNominationStatusReportDataType),
      description = Some("list of nomination-status-reports"),
      resolve = _.value
    )
  )
)
现在,关于你的问题

Field(
  "panelNominationStatusResult",
  PanelNominationStatusResultType,
  description = Some("Returns the details of ............"),
  arguments = companyIdType :: rewardNamesType :: startDateType :: endDateType :: Nil,
  resolve = { c =>
      c.ctx.getPanelStatusReport(c.arg(companyIdType), c.arg(startDateType), c.arg(endDateType), c.arg(rewardNamesType))
    }
)
如果需要
totalCount
,那么首先需要更改
getPanelStatusReport
方法,以同时返回
totalCount

def findPanelRewardStatusDetailsReport(
  companyId: Int,
  rewardNames: Seq[String],
  startDate: Long,
  endDate: Long
): Future[(Int, Seq[PanelRewardSatusDetail])] = ???

// updated result type
val PanelNominationStatusResultType = ObjectType(
  "PanelNominationStatusResult",
  "Dashboard Reports",
  fields[Unit, (Int, List[PanelRewardSatusDetail])](
    Field(
      "totalCount",
      IntType,
      description = Some("total count of nomination-status-reports"),
      resolve = _.value._1
    ),
    Field(
      "count",
      IntType,
      description = Some("count of nomination-status-reports in this response"),
      resolve = _.value._2.length
    ),
    Field(
      "panelNominationStatusList",
      ListType(PanelNominationStatusReportDataType),
      description = Some("list of nomination-status-reports"),
      resolve = _.value._2
    )
  )
)

您只需要为结果定义另一个GraphQL类型,该类型也包含计数

val PanelNominationStatusResultType = ObjectType(
  "PanelNominationStatusResult",
  "Dashboard Reports",
  fields[Unit, List[PanelRewardSatusDetail]](
    Field(
      "count",
      IntType,
      description = Some("count of nomination-status-reports in this response"),
      resolve = _.value.length
    ),
    Field(
      "panelNominationStatusList",
      ListType(PanelNominationStatusReportDataType),
      description = Some("list of nomination-status-reports"),
      resolve = _.value
    )
  )
)
现在,关于你的问题

Field(
  "panelNominationStatusResult",
  PanelNominationStatusResultType,
  description = Some("Returns the details of ............"),
  arguments = companyIdType :: rewardNamesType :: startDateType :: endDateType :: Nil,
  resolve = { c =>
      c.ctx.getPanelStatusReport(c.arg(companyIdType), c.arg(startDateType), c.arg(endDateType), c.arg(rewardNamesType))
    }
)
如果需要
totalCount
,那么首先需要更改
getPanelStatusReport
方法,以同时返回
totalCount

def findPanelRewardStatusDetailsReport(
  companyId: Int,
  rewardNames: Seq[String],
  startDate: Long,
  endDate: Long
): Future[(Int, Seq[PanelRewardSatusDetail])] = ???

// updated result type
val PanelNominationStatusResultType = ObjectType(
  "PanelNominationStatusResult",
  "Dashboard Reports",
  fields[Unit, (Int, List[PanelRewardSatusDetail])](
    Field(
      "totalCount",
      IntType,
      description = Some("total count of nomination-status-reports"),
      resolve = _.value._1
    ),
    Field(
      "count",
      IntType,
      description = Some("count of nomination-status-reports in this response"),
      resolve = _.value._2.length
    ),
    Field(
      "panelNominationStatusList",
      ListType(PanelNominationStatusReportDataType),
      description = Some("list of nomination-status-reports"),
      resolve = _.value._2
    )
  )
)

你可以检查我的请求查询,因为它给出了一些错误。我已经更新了我的问题。我想你的回答只会发送我结果中的行总数。例如:我有100行,但我一次发送10行作为响应,我需要发送总计数,即100。您能否检查我的请求查询,因为它给出了一些错误。我已经更新了我的问题。我想你的回答只会发送我结果中的行总数。例如:我有100行,但我一次发送10行作为响应,我需要发送总计数,即100。