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))
}
}
}
}