feat: true-microservices #40

Merged
Janis merged 25 commits from bigchanges into main 2026-04-29 22:06:20 +02:00
12 changed files with 25 additions and 15 deletions
Showing only changes of commit 69851f1ea2 - Show all commits
@@ -10,6 +10,7 @@ import java.util.UUID
@Entity
@Table(name = "accounts")
class Account extends PanacheEntityBase:
// scalafix:off DisableSyntax.var
@Id
@GeneratedValue(strategy = GenerationType.UUID)
var id: UUID = uninitialized
@@ -24,4 +25,5 @@ class Account extends PanacheEntityBase:
var rating: Int = 1500
var createdAt: Instant = uninitialized
var createdAt: Instant = uninitialized
// scalafix:on
@@ -11,6 +11,7 @@ import scala.Conversion
@Entity
@Table(name = "challenges")
class Challenge extends PanacheEntityBase:
// scalafix:off DisableSyntax.var
@Id
@GeneratedValue(strategy = GenerationType.UUID)
var id: UUID = uninitialized
@@ -47,6 +48,7 @@ class Challenge extends PanacheEntityBase:
@Column(nullable = true)
var gameId: String = uninitialized
// scalafix:on
def gameIdOpt: Option[String] = Option(gameId)
def declineReasonOpt: Option[DeclineReason] = Option(declineReason)
@@ -6,9 +6,7 @@ import jakarta.persistence.Converter
@Converter(autoApply = true)
class ChallengeColorConverter extends AttributeConverter[ChallengeColor, String]:
override def convertToDatabaseColumn(attribute: ChallengeColor): String =
if attribute == null then null else attribute.toString
Option(attribute).map(_.toString).orNull
override def convertToEntityAttribute(dbData: String): ChallengeColor =
if dbData == null then null
else
ChallengeColor.valueOf(dbData)
Option(dbData).map(ChallengeColor.valueOf).orNull
@@ -6,9 +6,7 @@ import jakarta.persistence.Converter
@Converter(autoApply = true)
class ChallengeStatusConverter extends AttributeConverter[ChallengeStatus, String]:
override def convertToDatabaseColumn(attribute: ChallengeStatus): String =
if attribute == null then null else attribute.toString
Option(attribute).map(_.toString).orNull
override def convertToEntityAttribute(dbData: String): ChallengeStatus =
if dbData == null then null
else
ChallengeStatus.valueOf(dbData)
Option(dbData).map(ChallengeStatus.valueOf).orNull
@@ -6,9 +6,7 @@ import jakarta.persistence.Converter
@Converter(autoApply = true)
class DeclineReasonConverter extends AttributeConverter[DeclineReason, String]:
override def convertToDatabaseColumn(attribute: DeclineReason): String =
if attribute == null then null else attribute.toString
Option(attribute).map(_.toString).orNull
override def convertToEntityAttribute(dbData: String): DeclineReason =
if dbData == null then null
else
DeclineReason.valueOf(dbData)
Option(dbData).map(DeclineReason.valueOf).orNull
@@ -12,7 +12,9 @@ import scala.jdk.CollectionConverters.*
class AccountRepository:
@Inject
// scalafix:off DisableSyntax.var
var em: EntityManager = scala.compiletime.uninitialized
// scalafix:on
def findByUsername(username: String): Option[Account] =
em.createQuery("FROM Account WHERE username = :username", classOf[Account])
@@ -13,7 +13,9 @@ import scala.jdk.CollectionConverters.*
class ChallengeRepository:
@Inject
// scalafix:off DisableSyntax.var
var em: EntityManager = scala.compiletime.uninitialized
// scalafix:on
def findActiveByChallengerId(challengerId: UUID): List[Challenge] =
em.createQuery(
@@ -20,11 +20,13 @@ import java.util.UUID
@Produces(Array(MediaType.APPLICATION_JSON))
class AccountResource:
// scalafix:off DisableSyntax.var
@Inject
var accountService: AccountService = uninitialized
@Inject
var jwt: JsonWebToken = uninitialized
// scalafix:on
@POST
def register(req: RegisterRequest): Response =
@@ -20,11 +20,13 @@ import java.util.UUID
@Produces(Array(MediaType.APPLICATION_JSON))
class ChallengeResource:
// scalafix:off DisableSyntax.var
@Inject
var challengeService: ChallengeService = uninitialized
@Inject
var jwt: JsonWebToken = uninitialized
// scalafix:on
@POST
@Path("/{username}")
@@ -17,8 +17,10 @@ import java.util.UUID
@ApplicationScoped
class AccountService:
// scalafix:off DisableSyntax.var
@Inject
var accountRepository: AccountRepository = uninitialized
// scalafix:on
@Transactional
def register(req: RegisterRequest): Either[AccountError, Account] =
@@ -18,6 +18,7 @@ import java.util.UUID
@ApplicationScoped
class ChallengeService:
// scalafix:off DisableSyntax.var
@Inject
var accountRepository: AccountRepository = uninitialized
@@ -27,6 +28,7 @@ class ChallengeService:
@Inject
@RestClient
var coreGameClient: CoreGameClient = uninitialized
// scalafix:on
@Transactional
def create(challengerId: UUID, destUsername: String, req: ChallengeRequest): Either[ChallengeError, Challenge] =
@@ -98,7 +100,6 @@ class ChallengeService:
val outgoing = challengeRepository.findActiveByChallengerId(userId).map(toDto)
ChallengeListDto(in = incoming, out = outgoing)
// scalafix:off DisableSyntax.null
private def createGame(challenge: Challenge): Either[ChallengeError, String] =
try
val (white, black) = assignColors(challenge)
@@ -106,7 +107,6 @@ class ChallengeService:
val req = CoreCreateGameRequest(Some(white), Some(black), tc, Some("Authenticated"))
Right(coreGameClient.createGame(req).gameId)
catch case _ => Left(ChallengeError.GameCreationFailed)
// scalafix:on DisableSyntax.null
private def assignColors(challenge: Challenge): (CorePlayerInfo, CorePlayerInfo) =
val challenger = CorePlayerInfo(challenge.challenger.id.toString, challenge.challenger.username)
@@ -15,7 +15,9 @@ class ChallengeResourceTest:
@InjectMock
@RestClient
// scalafix:off DisableSyntax.var
var coreGameClient: CoreGameClient = scala.compiletime.uninitialized
// scalafix:on
@BeforeEach
def setup(): Unit =