From 7983f7523457985aa4dd490c92aa41a1c652d796 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Thu, 23 Sep 2021 22:35:44 +0200 Subject: [PATCH] fix challenge accept API endpoint when challenge was canceled --- app/controllers/Challenge.scala | 5 ++++- modules/challenge/src/main/Challenge.scala | 1 + modules/challenge/src/main/ChallengeApi.scala | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/controllers/Challenge.scala b/app/controllers/Challenge.scala index 24309178f5..26039734d6 100644 --- a/app/controllers/Challenge.scala +++ b/app/controllers/Challenge.scala @@ -132,7 +132,10 @@ final class Challenge( _.filter(isForMe(_, me.some)) match { case None => tryRematch case Some(c) if c.accepted => tryRematch - case Some(challenge) => api.accept(challenge, me.some, none) inject jsonOkResult + case Some(c) => + api.accept(c, me.some, none) map { + _.fold(BadRequest(_), _ => jsonOkResult) + } } } } diff --git a/modules/challenge/src/main/Challenge.scala b/modules/challenge/src/main/Challenge.scala index cf7728ccd3..c7460befc4 100644 --- a/modules/challenge/src/main/Challenge.scala +++ b/modules/challenge/src/main/Challenge.scala @@ -72,6 +72,7 @@ case class Challenge( def openDest = destUser.isEmpty def online = status == Status.Created def active = online || status == Status.Offline + def canceled = status == Status.Canceled def declined = status == Status.Declined def accepted = status == Status.Accepted diff --git a/modules/challenge/src/main/ChallengeApi.scala b/modules/challenge/src/main/ChallengeApi.scala index ac08ee7e31..63515d9ebd 100644 --- a/modules/challenge/src/main/ChallengeApi.scala +++ b/modules/challenge/src/main/ChallengeApi.scala @@ -89,7 +89,8 @@ final class ChallengeApi( color: Option[chess.Color] = None ): Fu[Validated[String, Option[Pov]]] = acceptQueue { - if (user.exists(_.isBot) && !Game.isBotCompatible(chess.Speed(c.clock.map(_.config)))) + if (c.canceled) fuccess(Invalid("The challenge has been canceled.")) + else if (user.exists(_.isBot) && !Game.isBotCompatible(chess.Speed(c.clock.map(_.config)))) fuccess(Invalid("Game incompatible with a BOT account")) else if (c.challengerIsOpen) repo.setChallenger(c.setChallenger(user, sid), color) inject Valid(none)