UserAwareAction and ActionTransformer/Refiner


#1

How one can use UserAwareRequest in ActionTransformer/ActionRefiner?
I have the following code that works. However, the problem is that I cannot get request.identity with this code. When I try to change Request to UserAwareRequest I get a problem with 2 type parameters [E,B] in the definition. ActionTransformer requires just one parameter A. Can anybody help me with an example? Below is the code that works

case class HeaderRequest[A](val header: Header, request: Request[A]) extends WrappedRequest[A](request)
trait HeaderController {

  val sessionKey = "basket_id"
  val cartDao: CartDAO

  def HeaderAction = new ActionTransformer[Request, HeaderRequest] {
    def transform[A](request: Request[A]) = {
      val sessionId = request.session.get(sessionKey)
      sessionId match {
        case Some(basketId: String) => cartDao.getCart(basketId.toLong).map(cart => new HeaderRequest(Header(Some(cart)), request))
        case None => Future.successful(new HeaderRequest(Header(None), request))
      }
    }
  }
}

I suppose I need something similar with Request[A] replaced by UserAwareRequest[A]
Code below is one of attemps that does not work


trait AA {
  type E = Env
  type B
}
case class HeaderUserAwareRequest[A <: AA](val header: Header, request: UserAwareRequest[A#E, A#B]) extends WrappedRequest(request)
trait HeaderController {

  val sessionKey = "basket_id"
  val cartDao: CartDAO

  
  def HeaderUserAwareAction = new ActionTransformer[UserAwareRequest, HeaderUserAwareRequest] {
    def transform[A <: AA](request: UserAwareRequest[A#E, A#B]) = {
      val sessionId = request.session.get(sessionKey)
      sessionId match {
        case Some(basketId: String) => cartDao.getCart(basketId.toLong).map(cart => new HeaderUserAwareRequest(Header(Some(cart)), request))
        case None => Future.successful(new HeaderUserAwareRequest(Header(None), request))
      }
    }
  }

}

#2

When something wants 1 type parameters but you have more - you can do something like that:

type UserAwareRequestWrapper[B] = UserAwareRequest[DefaultEnv, B]


#3

Many thanks, works just fine!