one can only make tournaments for teams they lead

This commit is contained in:
Thibault Duplessis 2020-05-28 14:51:51 -06:00
parent 5de94b4026
commit 3e6b9ede58
2 changed files with 16 additions and 12 deletions

View file

@ -225,8 +225,8 @@ final class Tournament(
def form =
Auth { implicit ctx => me =>
NoLameOrBot {
teamC.teamsIBelongTo(me) map { teams =>
Ok(html.tournament.form.create(forms.create(me), teams))
env.team.teamRepo.enabledTeamsByLeader(me.id) map { teams =>
Ok(html.tournament.form.create(forms.create(me), teams.map(_.light)))
}
}
}
@ -291,7 +291,7 @@ final class Tournament(
err => BadRequest(html.tournament.form.create(err, teams)).fuccess,
setup =>
rateLimitCreation(me, setup.isPrivate, ctx.req) {
api.createTournament(setup, me, teams, getUserTeamIds) map { tour =>
api.createTournament(setup, me, teams, getLeaderTeamIds) map { tour =>
Redirect {
if (tour.isTeamBattle) routes.Tournament.teamBattleEdit(tour.id)
else routes.Tournament.show(tour.id)
@ -320,12 +320,12 @@ final class Tournament(
setup =>
rateLimitCreation(me, setup.isPrivate, req) {
teamC.teamsIBelongTo(me) flatMap { teams =>
api.createTournament(setup, me, teams, getUserTeamIds, andJoin = false) flatMap { tour =>
api.createTournament(setup, me, teams, getLeaderTeamIds, andJoin = false) flatMap { tour =>
jsonView(
tour,
none,
none,
getUserTeamIds,
getLeaderTeamIds,
env.team.getTeamName,
none,
none,
@ -480,4 +480,7 @@ final class Tournament(
private def getUserTeamIds(user: lila.user.User): Fu[List[TeamID]] =
env.team.cached.teamIdsList(user.id)
private def getLeaderTeamIds(user: lila.user.User): Fu[List[TeamID]] =
env.team.teamRepo.enabledTeamIdsByLeader(user.id)
}

View file

@ -19,13 +19,6 @@ final class TeamRepo(val coll: Coll)(implicit ec: scala.concurrent.ExecutionCont
def enabled(id: Team.ID) = coll.one[Team]($id(id) ++ enabledSelect)
def enabledTeamIdsByLeader(userId: User.ID): Fu[List[Team.ID]] =
coll.distinctEasy[Team.ID, List](
"_id",
$doc("leaders" -> userId) ++ enabledSelect,
ReadPreference.secondaryPreferred
)
def byIdsSortPopular(ids: Seq[Team.ID]): Fu[List[Team]] =
coll.ext
.find($inIds(ids))
@ -38,6 +31,14 @@ final class TeamRepo(val coll: Coll)(implicit ec: scala.concurrent.ExecutionCont
.sort(sortPopular)
.list[Team](100, ReadPreference.secondaryPreferred)
def enabledTeamIdsByLeader(userId: User.ID): Fu[List[Team.ID]] =
coll.ext
.primitive[Team.ID](
$doc("leaders" -> userId) ++ enabledSelect,
sortPopular,
"_id"
)
def leadersOf(teamId: Team.ID): Fu[Set[User.ID]] =
coll.primitiveOne[Set[User.ID]]($id(teamId), "leaders").dmap(~_)