diff --git a/assets/js/components/BattleDialog.jsx b/assets/js/components/BattleDialog.jsx index 3785839..05405ca 100644 --- a/assets/js/components/BattleDialog.jsx +++ b/assets/js/components/BattleDialog.jsx @@ -69,9 +69,11 @@ export const BattleDialog = ({ games }) => { const endReason = resign ? `${resign.charAt(0).toUpperCase() + resign.slice(1)} resigned` : 26 <= maxPoints ? 'Points' : 'Abandoned'; - const shareUrl = `${window.location.origin}/battle/${game.uuid}`; - const canContinue = !resign && 26 > maxPoints; + const canShare = !canContinue; + const bothRegistered = game.bothRegistered; + const canContinue = bothRegistered && !resign && 26 > maxPoints; const playUrl = `${window.location.origin}/play/${game.uuid}`; + const shareUrl = `${window.location.origin}/battle/${game.uuid}`; const duration = formatDuration(game.created, game.date); const pointDiff = Math.abs((game.redPoints ?? 0) - (game.bluePoints ?? 0)); @@ -108,7 +110,7 @@ export const BattleDialog = ({ games }) => { Continue - ) : ( + ) : canShare ? ( - )} + ) : null} diff --git a/src/Dto/ProfileGameDto.php b/src/Dto/ProfileGameDto.php index 5fe8b7d..69b5894 100644 --- a/src/Dto/ProfileGameDto.php +++ b/src/Dto/ProfileGameDto.php @@ -46,6 +46,7 @@ final readonly class ProfileGameDto implements JsonSerializable public float $blueBonusPoints, public array $redBonusStats, public array $blueBonusStats, + public bool $bothRegistered, ) { } diff --git a/src/Dto/ProfileGameDtoFactory.php b/src/Dto/ProfileGameDtoFactory.php index cbd3dc1..0697b34 100644 --- a/src/Dto/ProfileGameDtoFactory.php +++ b/src/Dto/ProfileGameDtoFactory.php @@ -61,7 +61,8 @@ final readonly class ProfileGameDtoFactory redBonusPoints: $game->redBonusPoints ?? 0.0, blueBonusPoints: $game->blueBonusPoints ?? 0.0, redBonusStats: $game->redBonusStats ?? [], - blueBonusStats: $game->blueBonusStats ?? [], + blueBonusStats: $game->blueBonusStats ?? [], + bothRegistered: $game->red !== null && $game->blue !== null, ); } @@ -128,6 +129,7 @@ final readonly class ProfileGameDtoFactory blueBonusPoints: $battle->blueBonusPoints, redBonusStats: $battle->redBonusStats, blueBonusStats: $battle->blueBonusStats, + bothRegistered: !$battle->oppIsGuest, ); } diff --git a/src/Repository/RecentBattleRepository.php b/src/Repository/RecentBattleRepository.php index a8f69d4..91e0553 100644 --- a/src/Repository/RecentBattleRepository.php +++ b/src/Repository/RecentBattleRepository.php @@ -40,9 +40,19 @@ class RecentBattleRepository extends ServiceEntityRepository public function findRecentForUser(int $userId, int $limit = 30): array { - return $this->createQueryBuilder('rb') - ->where('rb.userId = :uid') + $qb = $this->createQueryBuilder('rb'); + + return $qb + ->where($qb->expr()->eq('rb.userId', ':uid')) + ->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('rb.oppIsGuest', ':false'), + $qb->expr()->isNotNull('rb.redPoints'), + $qb->expr()->isNotNull('rb.bluePoints') + ), + ) ->setParameter('uid', $userId) + ->setParameter('false', false) ->orderBy('rb.updated', 'DESC') ->setMaxResults($limit) ->getQuery()