feat(ui): enhance user session management with interaction reset and locking

This commit is contained in:
2025-11-02 16:50:51 +01:00
parent 325f2e44f6
commit 8eec1fd38f
3 changed files with 27 additions and 4 deletions

View File

@@ -111,7 +111,10 @@ class IngameController @Inject()(
cardIdOpt match {
case Some(cardId) =>
val result = Try {
g.playCard(g.getUserSession(request.user.id), cardId.toInt)
val session = g.getUserSession(request.user.id)
session.lock.lock()
g.playCard(session, cardId.toInt)
session.lock.unlock()
}
if (result.isSuccess) {
NoContent
@@ -146,9 +149,15 @@ class IngameController @Inject()(
val result = Try {
cardIdOpt match {
case Some(cardId) if cardId == "skip" =>
g.playDogCard(g.getUserSession(request.user.id), -1)
val session = g.getUserSession(request.user.id)
session.lock.lock()
g.playDogCard(session, -1)
session.lock.unlock()
case Some(cardId) =>
g.playDogCard(g.getUserSession(request.user.id), cardId.toInt)
val session = g.getUserSession(request.user.id)
session.lock.lock()
g.playDogCard(session, cardId.toInt)
session.lock.unlock()
case None =>
throw new IllegalArgumentException("cardId parameter is missing")
}
@@ -184,7 +193,10 @@ class IngameController @Inject()(
trumpOpt match {
case Some(trump) =>
val result = Try {
g.selectTrump(g.getUserSession(request.user.id), trump.toInt)
val session = g.getUserSession(request.user.id)
session.lock.lock()
g.selectTrump(session, trump.toInt)
session.lock.unlock()
}
if (result.isSuccess) {
NoContent
@@ -216,7 +228,10 @@ class IngameController @Inject()(
tieOpt match {
case Some(tie) =>
val result = Try {
val session = g.getUserSession(request.user.id)
session.lock.lock()
g.selectTie(g.getUserSession(request.user.id), tie.toInt)
session.lock.unlock()
}
if (result.isSuccess) {
NoContent