Scala PlayFramework如何为模型分配新值



i在Scala PlayFramework项目中Hava Little Complex模型。我必须执行一些数据库请求,然后我必须为模型分配新值。

整个方法看起来像这样:

def getEditProcessTemplateData(processTemplateId: Int): Action[AnyContent] = Action.async {
    //Get all steps of this process templates
    val stepIds: Future[Seq[Int]] = processTemplateDTO.getProcessStepTemplateIds(processTemplateId)
    val process = for {
      allApprovedProcessTemplates <- processTemplateDTO.getApprovedProcessTemplates //Get all approved process templates
      processTemplate <- processTemplateDTO.getProcessTemplate(processTemplateId) // Get the Process Template
      prerequisites <- getProcessTemplateForEdit(processPrerequisitesDTO.getProcessPrerequisiteProcessTemplateIdsByProcessTemplateId(processTemplateId))
      postConditions <- getProcessTemplateForEdit(processPostConditionsDTO.getProcessPostConditionProcessTemplateIdsByProcessTemplateId(processTemplateId))
      approvedProcessTemplate <- processTemplateDTO.getProcessTemplate(processTemplate.get.approveprocess)
      trainedProcessTemplate <- processTemplateDTO.getProcessTemplate(processTemplate.get.trainingsprocess)
      processSteps <- processTemplateDTO.getProcessStepTemplates(processTemplateId)
      // Step prerequisites
      processStepsPrerequisites <- getProcessStepsPrerequisites(stepIds)
      processStepsPrerequisiteProcessTemplate <- getProcessStepsPrerequisiteProcessTemplate(stepIds)
      processTemplatesForStepPrerequisites <- getProcessTemplateForStepPrerequisite(stepIds)
      // Step post conditions
      processStepsPostConditions <- getProcessStepsPostConditions(stepIds)
      processStepPostConditionProcessTemplate <- getProcessStepPostConditionProcessTemplate(stepIds)
      processTemplatesForStepPostConditions <- getProcessTemplateForStepPostCondition(stepIds)
      // Derived processes
      derivedProcesses <- getDerivedProcesses(stepIds)
      processTemplatesForStepDerivedProcesses <- getProcessStepsDerivedProcesses(stepIds)
      // Process to process step
      processStepsTemplates_ProcessTemplates <- getProcessStepsTemplates_ProcessTemplates(stepIds)
      processTemplatesForProcessTemplatesToProcessStep <- getProcessTemplateToProcessStepId(stepIds)
      responsible <- raciProcessTemplateDTO.getResponsibleProcessTemplates(processTemplateId) // get all responsibles for this process template
      accountable <- raciProcessTemplateDTO.getAccountableProcessTemplates(processTemplateId) // get all accountables for this process template
      consulted <- raciProcessTemplateDTO.getConsultedProcessTemplates(processTemplateId) // get all consulted for this process template
      informed <- raciProcessTemplateDTO.getInformedProcessTemplates(processTemplateId) // get all consulted for this process template
    } yield (allApprovedProcessTemplates, processTemplate, prerequisites, postConditions, processSteps, processStepsPrerequisites,
      processStepsPrerequisiteProcessTemplate, processTemplatesForStepPrerequisites, processStepsPostConditions, processStepPostConditionProcessTemplate, processTemplatesForStepPostConditions, derivedProcesses,
      processTemplatesForStepDerivedProcesses, processStepsTemplates_ProcessTemplates, processTemplatesForProcessTemplatesToProcessStep, approvedProcessTemplate, trainedProcessTemplate, responsible, accountable, consulted, informed)
    process.map({ case (allApprovedProcessTemplates, processTemplate, prerequisites, postConditions, processSteps, processStepsPrerequisites,
    processStepsPrerequisiteProcessTemplate, processTemplatesForStepPrerequisites, processStepsPostConditions, processStepPostConditionProcessTemplate, processTemplatesForStepPostConditions, derivedProcesses,
    processTemplatesForStepDerivedProcesses, processStepsTemplates_ProcessTemplates, processTemplatesForProcessTemplatesToProcessStep, approvedProcessTemplate, trainedProcessTemplate, responsible, accountable, consulted, informed) =>
      processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] =>
        Future.sequence(psteps.map {
          step => {
            val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get)
            prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs)))
          }
        })
      }
      Ok(Json.obj(
        "allApprovedProcessTemplates" -> allApprovedProcessTemplates,
        "processTemplate" -> processTemplate,
        "prerequisites" -> prerequisites,
        "postConditions" -> postConditions,
        "approvedProcessTemplate" -> approvedProcessTemplate,
        "trainedProcessTemplate" -> trainedProcessTemplate,
        //       Step prerequisites
        "processStepsPrerequisites" -> processStepsPrerequisites,
        "processStepsPrerequisiteProcessTemplate" -> processStepsPrerequisiteProcessTemplate,
        "processTemplatesForStepPrerequisites" -> processTemplatesForStepPrerequisites,
        // Step post conditions
        "processStepsPostConditions" -> processStepsPostConditions,
        "processStepPostConditionProcessTemplate" -> processStepPostConditionProcessTemplate,
        "processTemplatesForStepPostConditions" -> processTemplatesForStepPostConditions,
        // Derived processes
        "derivedProcesses" -> derivedProcesses,
        "processTemplatesForStepDerivedProcesses" -> processTemplatesForStepDerivedProcesses,
        // Process to process step
        "processStepsTemplates_ProcessTemplates" -> processStepsTemplates_ProcessTemplates,
        "processTemplatesForProcessTemplatesToProcessStep" -> processTemplatesForProcessTemplatesToProcessStep,
        "steps" -> processSteps,
        "responsible" -> responsible,
        "accountable" -> accountable,
        "consulted" -> consulted,
        "informed" -> informed
      ))
    })
  }

我有问题的代码部分是:

  processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] =>
    Future.sequence(psteps.map {
      step => {
        val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get)
        prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs)))
      }
    })
  }

我有一个错误:

found   : Seq[models.ProcessStepTemplatesModel] => scala.concurrent.Future[Seq[models.ProcessStepTemplatesModel]]
required: models.ProcessStepTemplatesModel => ?
[error]       processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] =>

我该如何解决这个问题?

谢谢!

我认为您已经有需要的代码,您只需要一个小的修改:

Future.sequence {
    processSteps.map { step =>
        val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get)
        prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs)))
    }
}

最新更新