some more code cleanup

pull/8154/head
Thibault Duplessis 2021-02-19 12:40:30 +01:00
parent 72ca2ef511
commit 72430dbb7b
2 changed files with 20 additions and 28 deletions

View File

@ -287,7 +287,7 @@ final class Mod(
def refreshUserAssess(username: String) =
Secure(_.MarkEngine) { implicit ctx => me =>
OptionFuResult(env.user.repo named username) { user =>
assessApi.refreshAssessByUsername(username) >>
assessApi.refreshAssessOf(user) >>
env.irwin.api.requests.fromMod(Suspect(user), AsMod(me)) >>
userC.renderModZoneActions(username)
}

View File

@ -42,21 +42,18 @@ final class AssessApi(
def createPlayerAssessment(assessed: PlayerAssessment) =
assessRepo.coll.update.one($id(assessed._id), assessed, upsert = true).void
def getPlayerAssessmentById(id: String) =
def getPlayerAssessmentById(id: User.ID) =
assessRepo.coll.byId[PlayerAssessment](id)
private def getPlayerAssessmentsByUserId(userId: String, nb: Int) =
private def getPlayerAssessmentsByUserId(userId: User.ID, nb: Int) =
assessRepo.coll
.find($doc("userId" -> userId))
.sort($doc("date" -> -1))
.sort($sort desc "date")
.cursor[PlayerAssessment](ReadPreference.secondaryPreferred)
.gather[List](nb)
def getResultsByGameIdAndColor(gameId: String, color: Color) =
getPlayerAssessmentById(gameId + "/" + color.name)
.list(nb)
private def getPlayerAggregateAssessment(
userId: String,
userId: User.ID,
nb: Int = 100
): Fu[Option[PlayerAggregateAssessment]] =
userRepo byId userId flatMap {
@ -73,25 +70,24 @@ final class AssessApi(
}
def getPlayerAggregateAssessmentWithGames(
userId: String,
userId: User.ID,
nb: Int = 100
): Fu[Option[PlayerAggregateAssessment.WithGames]] =
getPlayerAggregateAssessment(userId, nb) flatMap {
case None => fuccess(none)
case Some(pag) => withGames(pag).map(_.some)
_ ?? { pag =>
withGames(pag) dmap some
}
}
def refreshAssessByUsername(username: String): Funit =
withUser(username) { user =>
!user.isBot ??
(gameRepo.gamesForAssessment(user.id, 100) flatMap { gs =>
(gs map { g =>
analysisRepo.byGame(g) flatMap {
_ ?? { onAnalysisReady(g, _, thenAssessUser = false) }
}
}).sequenceFu.void
}) >> assessUser(user.id)
}
def refreshAssessOf(user: User): Funit =
!user.isBot ??
(gameRepo.gamesForAssessment(user.id, 100) flatMap { gs =>
(gs map { g =>
analysisRepo.byGame(g) flatMap {
_ ?? { onAnalysisReady(g, _, thenAssessUser = false) }
}
}).sequenceFu.void
}) >> assessUser(user.id)
def onAnalysisReady(game: Game, analysis: Analysis, thenAssessUser: Boolean = true): Funit =
gameRepo holdAlerts game flatMap { holdAlerts =>
@ -117,7 +113,7 @@ final class AssessApi(
})
}
def assessUser(userId: String): Funit = {
def assessUser(userId: User.ID): Funit = {
getPlayerAggregateAssessment(userId) flatMap {
case Some(playerAggregateAssessment) =>
playerAggregateAssessment.action match {
@ -219,8 +215,4 @@ final class AssessApi(
}
}
}
private def withUser[A](username: String)(op: User => Fu[A]): Fu[A] =
userRepo named username orFail s"[mod] missing user $username" flatMap op
}