parallelize mod communications IO for faster workflow

pull/2871/head
Thibault Duplessis 2017-03-30 12:18:00 +02:00
parent 049a1baaeb
commit deb8f9940f
1 changed files with 14 additions and 14 deletions

View File

@ -2,13 +2,13 @@ package controllers
import lila.api.Context
import lila.app._
import lila.user.{ UserRepo, User => UserModel }
import lila.common.IpAddress
import lila.user.{ UserRepo, User => UserModel }
import views._
import scala.concurrent.duration._
import play.api.libs.json._
import play.api.mvc._
import scala.concurrent.duration._
object Mod extends LilaController {
@ -140,20 +140,20 @@ object Mod extends LilaController {
def communication(username: String) = Secure(_.MarkTroll) { implicit ctx => me =>
OptionFuOk(UserRepo named username) { user =>
for {
povs <- lila.game.GameRepo.recentPovsByUserFromSecondary(user, 100)
chats <- Env.chat.api.playerChat optionsByOrderedIds povs.map(_.gameId)
povWithChats = (povs zip chats) collect {
case (p, Some(c)) if c.nonEmpty => p -> c
} take 9
threads <- {
lila.message.ThreadRepo.visibleByUser(user.id, 50) map {
lila.game.GameRepo.recentPovsByUserFromSecondary(user, 80) flatMap { povs =>
Env.chat.api.playerChat optionsByOrderedIds povs.map(_.gameId) zip
lila.message.ThreadRepo.visibleByUser(user.id, 40).map {
_ filter (_ hasPostsWrittenBy user.id) take 9
} zip
(Env.shutup.api getPublicLines user.id) zip
(Env.security userSpy user.id) map {
case chats ~ threads ~ publicLines ~ spy =>
val povWithChats = (povs zip chats) collect {
case (p, Some(c)) if c.nonEmpty => p -> c
} take 9
html.mod.communication(user, povWithChats, threads, publicLines, spy)
}
}
publicLines <- Env.shutup.api getPublicLines user.id
spy <- Env.security userSpy user.id
} yield html.mod.communication(user, povWithChats, threads, publicLines, spy)
}
}
}