async autofollow and seenAt update on user restoration
This commit is contained in:
parent
5c4246ddc0
commit
49d322a481
|
@ -1,18 +1,18 @@
|
|||
package controllers
|
||||
|
||||
import play.api.data.Form
|
||||
import play.api.http._
|
||||
import play.api.libs.iteratee.{ Iteratee, Enumerator }
|
||||
import play.api.libs.json.{ Json, JsValue, Writes }
|
||||
import play.api.mvc._, Results._
|
||||
import play.api.mvc.WebSocket.FrameFormatter
|
||||
import play.api.templates.Html
|
||||
import scalaz.Zero
|
||||
|
||||
import lila.app._
|
||||
import lila.common.LilaCookie
|
||||
import lila.user.{ Context, HeaderContext, BodyContext, User ⇒ UserModel }
|
||||
import lila.security.{ Permission, Granter }
|
||||
|
||||
import scalaz.Zero
|
||||
import play.api.mvc._, Results._
|
||||
import play.api.mvc.WebSocket.FrameFormatter
|
||||
import play.api.libs.iteratee.{ Iteratee, Enumerator }
|
||||
import play.api.data.Form
|
||||
import play.api.templates.Html
|
||||
import play.api.http._
|
||||
import play.api.libs.json.{ Json, JsValue, Writes }
|
||||
import lila.user.{ Context, HeaderContext, BodyContext, User ⇒ UserModel }
|
||||
|
||||
private[controllers] trait LilaController
|
||||
extends Controller
|
||||
|
@ -169,20 +169,19 @@ private[controllers] trait LilaController
|
|||
Forbidden("no permission")
|
||||
|
||||
protected def reqToCtx(req: Request[_]): Fu[BodyContext] =
|
||||
Env.security.api restoreUser req map { user ⇒
|
||||
setOnline(user)
|
||||
Context(req, user)
|
||||
}
|
||||
restoreUser(req) map { Context(req, _) }
|
||||
|
||||
protected def reqToCtx(req: RequestHeader): Fu[HeaderContext] =
|
||||
Env.security.api restoreUser req map { user ⇒
|
||||
setOnline(user)
|
||||
Context(req, user)
|
||||
}
|
||||
restoreUser(req) map { Context(req, _) }
|
||||
|
||||
private def setOnline(user: Option[UserModel]) {
|
||||
user foreach Env.user.setOnline
|
||||
}
|
||||
private def restoreUser(req: RequestHeader): Fu[Option[UserModel]] =
|
||||
Env.security.api restoreUser req addEffect {
|
||||
_ foreach { user ⇒
|
||||
lila.user.UserRepo setSeenAt user.id
|
||||
Env.user setOnline user
|
||||
user.seenAt.isEmpty ?? Env.relation.autofollow(user)
|
||||
}
|
||||
}
|
||||
|
||||
protected def Reasonable(page: Int, max: Int = 40)(result: ⇒ Fu[Result]): Fu[Result] =
|
||||
(page < max).fold(result, BadRequest("resource too old").fuccess)
|
||||
|
|
|
@ -25,4 +25,14 @@ object $update {
|
|||
|
||||
def field[ID: Writes, A: InColl, B: Writes](id: ID, name: String, value: B, upsert: Boolean = false): Funit =
|
||||
apply($select(id), $set(name -> value), upsert = upsert)
|
||||
|
||||
// UNCHECKED
|
||||
|
||||
def unchecked[A: InColl](selector: JsObject, update: JsObject, upsert: Boolean = false, multi: Boolean = false) {
|
||||
implicitly[InColl[A]].coll.uncheckedUpdate(selector, update, upsert, multi)
|
||||
}
|
||||
|
||||
def fieldUnchecked[ID: Writes, A: InColl, B: Writes](id: ID, name: String, value: B, upsert: Boolean = false) {
|
||||
unchecked($select(id), $set(name -> value), upsert = upsert)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -152,6 +152,10 @@ object UserRepo {
|
|||
}
|
||||
}
|
||||
|
||||
def setSeenAt(id: ID) {
|
||||
$update.fieldUnchecked(id, "seenAt", $date(DateTime.now))
|
||||
}
|
||||
|
||||
def idsAverageElo(ids: Iterable[String]): Fu[Int] = {
|
||||
val command = MapReduce(
|
||||
collectionName = userTube.coll.name,
|
||||
|
@ -207,7 +211,8 @@ object UserRepo {
|
|||
"drawH" -> 0
|
||||
),
|
||||
"enabled" -> true,
|
||||
"createdAt" -> $date(DateTime.now))
|
||||
"createdAt" -> $date(DateTime.now),
|
||||
"seenAt" -> $date(DateTime.now))
|
||||
}
|
||||
|
||||
private def hash(pass: String, salt: String): String = "%s{%s}".format(pass, salt).sha1
|
||||
|
|
Loading…
Reference in a new issue