Reputation: 5619
i have the following function:
def createProcessTemplate: Action[AnyContent] = Action.async { implicit request =>
println(request.body.asJson)
request.body.asJson.map(_.validate[ProcessTemplatesModel] match {
case JsSuccess(process, _) =>
processTemplateDTO.createProcessTemplate(process).map {
process => {
// Create process steps templates
createNewProcessStepTemplate(request, process.id.get)
// Create prerequisites
createProcessTemplatePrerequisite(request, process.id.get)
// Create postConditions
createProcessTemplatePostCondition(request, process.id.get)
processTemplateDTO.getProcessStepTemplates(process.id.get).flatMap(
steps => Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps)))
}
}
case JsError(_) =>
Future.successful(BadRequest("Process Template not create client"))
case _ => Future.successful(BadRequest("Process Template create client"))
}).getOrElse(Future.successful(BadRequest("Process Template create client")))
}
I want to return the steps in the Ok Statement, but got this error:
what could be the problem in this case?
thanks
Upvotes: 1
Views: 62
Reputation: 1342
Try this code:
def createProcessTemplate: Action[AnyContent] = Action.async { implicit request =>
println(request.body.asJson)
request.body.asJson.map(_.validate[ProcessTemplatesModel] match {
case JsSuccess(process, _) =>
processTemplateDTO.createProcessTemplate(process).flatMap {
process => {
// Create process steps templates
createNewProcessStepTemplate(request, process.id.get)
// Create prerequisites
createProcessTemplatePrerequisite(request, process.id.get)
// Create postConditions
createProcessTemplatePostCondition(request, process.id.get)
processTemplateDTO.getProcessStepTemplates(process.id.get).map(
steps => Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps)))
}
}
case JsError(_) =>
Future.successful(BadRequest("Process Template not create client"))
case _ => Future.successful(BadRequest("Process Template create client"))
}).getOrElse(Future.successful(BadRequest("Process Template create client")))
}
I've switched the map
and flatMap
that appear around calls to processTemplateDTO
methods. In the first one you need flatMap
because you return a Future
, but in the second one you actually want a map
because you return a Result
.
Upvotes: 2