Private
Public Access
1
0

Compare commits

..

2 Commits

Author SHA1 Message Date
1d8efa4e61 chg: usr: fine-tune the recent battle list #8
All checks were successful
Deploy to Production / deploy (push) Successful in 27s
2026-04-21 13:57:44 +02:00
69fce52bed chg: pkg: new version release !skipChangelog 2026-04-21 11:47:58 +02:00
5 changed files with 55 additions and 7 deletions

View File

@@ -1,6 +1,39 @@
# Changelog
## v2026.2.7-0 (2026-04-21)
### Changes
* Small changes on docs - and improve text on homepage #8. [Lang]
* Massive refactor on front-end for unification and readiness #8. [Lang]
* Update all doc blocks on back-end #8. [Lang]
* Small refactors on back-end #8. [Lang]
* Add RecentBattle entity that is a Materialized View to speed up the view - and further refactor on ProfileController #8. [Lang]
* Create the UserStats entity what is a Materialized View to store Profile stats for every user - & massive ProfileController refactor #8. [Lang]
* Refactor the SecurityController #7. [Lang]
* Refactor the code - there was unnecessary codes and wrongly formatted or designed code that are related to Repositories #7. [Lang]
* Upgrade the doctrine related back-end pkgs to the latest available version #7. [Lang]
* Add filter to the Profile page's recent plays and an infite list too #7. [Lang]
* Upgrade to the latest doctrine pkg on back-end #7. [Lang]
### Fix
* Do not hide the end-game overlay ever #8. [Lang]
* The username was not recognized properly #7. [Lang]
## v2026.2.6-1 (2026-04-19)
### Fix

View File

@@ -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 }) => {
<i className="fa fa-play" />
Continue
</a>
) : (
) : canShare ? (
<button
className={`bd-share${copied ? ' bd-share--copied' : ''}`}
onClick={handleShare}
@@ -118,7 +120,7 @@ export const BattleDialog = ({ games }) => {
<i className={`fa ${copied ? 'fa-check' : 'fa-share-alt'}`} />
{copied ? 'Copied!' : 'Share'}
</button>
)}
) : null}
<button className="bd-close" onClick={() => setOpen(false)} aria-label="Close">
<i className="fa fa-times" />
</button>

View File

@@ -46,6 +46,7 @@ final readonly class ProfileGameDto implements JsonSerializable
public float $blueBonusPoints,
public array $redBonusStats,
public array $blueBonusStats,
public bool $bothRegistered,
) {
}

View File

@@ -62,6 +62,7 @@ final readonly class ProfileGameDtoFactory
blueBonusPoints: $game->blueBonusPoints ?? 0.0,
redBonusStats: $game->redBonusStats ?? [],
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,
);
}

View File

@@ -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()