clear nbRequest cache on request deletion

relay-selector
Thibault Duplessis 2017-10-30 10:31:27 -05:00
parent 703223d28f
commit 688cee1fdb
4 changed files with 19 additions and 7 deletions

View File

@ -56,7 +56,7 @@ final class Env(
system.lilaBus.subscribe(system.actorOf(Props(new Actor {
def receive = {
case lila.hub.actorApi.mod.Shadowban(userId, true) => RequestRepo deleteByUserId userId
case lila.hub.actorApi.mod.Shadowban(userId, true) => api deleteRequestsByUserId userId
}
})), 'shadowban)
}

View File

@ -33,6 +33,8 @@ object RequestRepo {
def teamQuery(teamId: ID) = $doc("team" -> teamId)
def teamsQuery(teamIds: List[ID]) = $doc("team" $in teamIds)
def deleteByUserId(userId: lila.user.User.ID) =
coll.remove($doc("user" -> userId))
def getByUserId(userId: lila.user.User.ID) =
coll.find($doc("user" -> userId)).list[Request]()
def remove(id: ID) = coll.remove($id(id))
}

View File

@ -115,6 +115,14 @@ final class TeamApi(
doJoin(team, user.id) >>- notifier.acceptRequest(team, request))
} yield ()
def deleteRequestsByUserId(userId: lila.user.User.ID) =
RequestRepo.getByUserId(userId) flatMap {
_.map { request =>
RequestRepo.remove(request.id) >>
TeamRepo.creatorOf(request.team).map { _ ?? cached.nbRequests.invalidate }
}.sequenceFu
}
def doJoin(team: Team, userId: String): Funit = !belongsTo(team.id, userId) flatMap {
_ ?? {
MemberRepo.add(team.id, userId) >>

View File

@ -5,6 +5,7 @@ import reactivemongo.api._
import reactivemongo.bson._
import lila.db.dsl._
import lila.user.User
object TeamRepo {
@ -13,8 +14,6 @@ object TeamRepo {
import BSONHandlers._
type ID = String
def byOrderedIds(ids: Seq[Team.ID]) = coll.byOrderedIds[Team, Team.ID](ids)(_.id)
def cursor(
@ -26,12 +25,15 @@ object TeamRepo {
) =
coll.find(selector).cursor[Team](readPreference)
def owned(id: String, createdBy: String): Fu[Option[Team]] =
def owned(id: Team.ID, createdBy: User.ID): Fu[Option[Team]] =
coll.uno[Team]($id(id) ++ $doc("createdBy" -> createdBy))
def teamIdsByCreator(userId: String): Fu[List[String]] =
def teamIdsByCreator(userId: User.ID): Fu[List[String]] =
coll.distinct[String, List]("_id", $doc("createdBy" -> userId).some)
def creatorOf(teamId: Team.ID): Fu[Option[User.ID]] =
coll.primitiveOne[User.ID]($id(teamId), "_id")
def name(id: String): Fu[Option[String]] =
coll.primitiveOne[String]($id(id), "name")