def createRecipe = authAction()

in app/controllers/RecipeController.scala [164:248]


  def createRecipe = authAction(parse.formUrlEncoded) { implicit request =>
    Forms.createRecipe
      .bindFromRequest()
      .fold(
        { formWithErrors =>
          BadRequest(
            views.html
              .newRecipe(formWithErrors, BaseImages.list().toSeq, Roles.listIds)
          )
        },
        {
          case (
                id,
                description,
                baseImageId,
                diskSize,
                bakeSchedule,
                encryptedCopies
              ) =>
            log.info(
              s"Creating recipe ${id} - requested by ${request.user.email}"
            )
            Recipes.findById(id) match {
              case Some(existingRecipe) =>
                val formWithError = Forms.createRecipe
                  .fill(
                    (
                      id,
                      description,
                      baseImageId,
                      diskSize,
                      bakeSchedule,
                      encryptedCopies
                    )
                  )
                  .withError("id", "This recipe ID is already in use")
                Conflict(views.html.newBaseImage(formWithError, Roles.listIds))
              case None =>
                BaseImages.findById(baseImageId) match {
                  case Some(baseImage) =>
                    val customisedRoles = controllers.ControllerHelpers
                      .parseEnabledRoles(request.body)
                    customisedRoles.fold(
                      error => BadRequest(s"Problem parsing roles: $error"),
                      roles => {
                        val recipe = Recipes.create(
                          id,
                          description,
                          baseImage,
                          diskSize,
                          roles,
                          createdBy = request.user.fullName,
                          bakeSchedule,
                          encryptedCopies
                        ) // TODO: FIX THIS
                        bakeScheduler.reschedule(recipe)
                        Redirect(routes.RecipeController.showRecipe(id))
                          .flashing("info" -> "Successfully created recipe")
                      }
                    )
                  case None =>
                    val formWithError = Forms.createRecipe
                      .fill(
                        (
                          id,
                          description,
                          baseImageId,
                          diskSize,
                          bakeSchedule,
                          encryptedCopies
                        )
                      )
                      .withError("baseImageId", "Unknown base image")
                    BadRequest(
                      views.html.newRecipe(
                        formWithError,
                        BaseImages.list().toSeq,
                        Roles.listIds
                      )
                    )
                }
            }
        }
      )
  }