ReModel: remove the CharacterInstanceId: server

This commit is contained in:
Thomas Andres Gomez 2025-03-24 18:03:41 +01:00
parent a69f95e62d
commit a5adc61e90
61 changed files with 1072 additions and 1038 deletions

View file

@ -6,11 +6,9 @@ import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.character
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.npc
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.CampaignEvent
import com.pixelized.shared.lwa.protocol.websocket.GameMasterEvent
import com.pixelized.shared.lwa.protocol.websocket.RestSynchronisation
import com.pixelized.shared.lwa.protocol.websocket.SocketMessage
import com.pixelized.shared.lwa.usecase.CampaignUseCase
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -113,25 +111,25 @@ class CampaignStore(
campaign(update = true)
}
is CampaignMessage -> {
is CampaignEvent -> {
val instanceId = Campaign.CharacterInstance.Id(
prefix = message.prefix,
characterSheetId = message.characterSheetId,
instanceId = message.instanceId,
)
when (message) {
is CampaignMessage.UpdateCharacteristic -> updateCharacteristic(
is CampaignEvent.UpdateCharacteristic -> updateCharacteristic(
characterInstanceId = instanceId,
characteristic = factory.convertFromJson(json = message.characteristic),
value = message.newValue,
)
is CampaignMessage.UpdateDiminished -> updateDiminished(
is CampaignEvent.UpdateDiminished -> updateDiminished(
characterInstanceId = instanceId,
diminished = message.diminished,
)
is CampaignMessage.ToggleActiveAlteration -> updateAlterations(
is CampaignEvent.ToggleActiveAlteration -> updateAlterations(
characterInstanceId = instanceId,
alterationId = message.alterationId,
)

View file

@ -3,10 +3,9 @@ package com.pixelized.desktop.lwa.repository.characterSheet
import com.pixelized.desktop.lwa.network.LwaClient
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheetJsonFactory
import com.pixelized.shared.lwa.model.characterSheet.factory.CharacterSheetJsonFactory
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheetPreview
import com.pixelized.shared.lwa.protocol.websocket.SocketMessage
import com.pixelized.shared.lwa.protocol.websocket.RestSynchronisation
import com.pixelized.shared.lwa.protocol.websocket.UpdateSkillUsageMessage
import com.pixelized.shared.lwa.usecase.CharacterSheetUseCase
import kotlinx.coroutines.CoroutineScope

View file

@ -1,14 +1,12 @@
package com.pixelized.desktop.lwa.repository.roll_history
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.shared.lwa.protocol.websocket.RollMessage
import com.pixelized.shared.lwa.protocol.websocket.RollEvent
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.shareIn
class RollHistoryRepository(
@ -16,8 +14,8 @@ class RollHistoryRepository(
) {
private val scope = CoroutineScope(Dispatchers.IO)
val rolls: SharedFlow<RollMessage> = network.data
.filterIsInstance(RollMessage::class)
val rolls: SharedFlow<RollEvent> = network.data
.filterIsInstance(RollEvent::class)
.shareIn(
scope = scope,
started = SharingStarted.Eagerly,

View file

@ -15,7 +15,7 @@ import com.pixelized.shared.lwa.model.campaign.damage
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.power
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.CampaignEvent
class CharacterDetailCharacteristicDialogViewModel(
private val characterSheetRepository: CharacterSheetRepository,
@ -84,7 +84,7 @@ class CharacterDetailCharacteristicDialogViewModel(
)
// share the data through the websocket.
network.share(
message = CampaignMessage.UpdateCharacteristic(
message = CampaignEvent.UpdateCharacteristic(
timestamp = System.currentTimeMillis(),
prefix = characterInstanceId.prefix,
characterSheetId = characterInstanceId.characterSheetId,

View file

@ -5,7 +5,6 @@ import androidx.lifecycle.viewModelScope
import com.pixelized.desktop.lwa.repository.characterSheet.CharacterSheetRepository
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.repository.settings.SettingsRepository
import com.pixelized.shared.lwa.protocol.websocket.GameEvent
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.distinctUntilChanged

View file

@ -13,7 +13,7 @@ import com.pixelized.desktop.lwa.ui.overlay.roll.DifficultyUio.Difficulty
import com.pixelized.desktop.lwa.ui.overlay.roll.RollAction.RollActionUio
import com.pixelized.shared.lwa.model.AlteredCharacterSheet
import com.pixelized.shared.lwa.model.AlteredCharacterSheetFactory
import com.pixelized.shared.lwa.protocol.websocket.RollMessage
import com.pixelized.shared.lwa.protocol.websocket.RollEvent
import com.pixelized.shared.lwa.usecase.ExpressionUseCase
import com.pixelized.shared.lwa.usecase.SkillStepUseCase
import kotlinx.coroutines.Job
@ -278,7 +278,7 @@ class RollViewModel(
) {
val rollAction = rollAction ?: return
val payload = RollMessage(
val payload = RollEvent(
timestamp = System.currentTimeMillis(),
uuid = UUID.randomUUID().toString(),
prefix = rollAction.characterInstanceId.prefix,
@ -297,11 +297,11 @@ class RollViewModel(
rollSuccessLimit = rollStep?.success?.last,
critical = rollStep?.let {
when (roll) {
in it.criticalSuccess -> RollMessage.Critical.CRITICAL_SUCCESS
in it.specialSuccess -> RollMessage.Critical.SPECIAL_SUCCESS
in it.success -> RollMessage.Critical.SUCCESS
in it.failure -> RollMessage.Critical.FAILURE
in it.criticalFailure -> RollMessage.Critical.CRITICAL_FAILURE
in it.criticalSuccess -> RollEvent.Critical.CRITICAL_SUCCESS
in it.specialSuccess -> RollEvent.Critical.SPECIAL_SUCCESS
in it.success -> RollEvent.Critical.SUCCESS
in it.failure -> RollEvent.Critical.FAILURE
in it.criticalFailure -> RollEvent.Critical.CRITICAL_FAILURE
else -> null
}
},

View file

@ -9,7 +9,7 @@ import com.pixelized.desktop.lwa.repository.campaign.CampaignRepository
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.dialog.DiminishedStatDialogUio
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.CampaignEvent
import lwacharactersheet.composeapp.generated.resources.Res
import lwacharactersheet.composeapp.generated.resources.character_sheet__diminished__label
import org.jetbrains.compose.resources.getString
@ -56,7 +56,7 @@ class CharacterDiminishedViewModel(
) {
val diminished = dialog.value().text.toIntOrNull() ?: 0
networkRepository.share(
message = CampaignMessage.UpdateDiminished(
message = CampaignEvent.UpdateDiminished(
timestamp = System.currentTimeMillis(),
prefix = dialog.characterInstanceId.prefix,
characterSheetId = dialog.characterInstanceId.characterSheetId,

View file

@ -8,11 +8,9 @@ import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.RollTextMessag
import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.TextMessage
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Damage
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Power
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.GameEvent
import com.pixelized.shared.lwa.protocol.websocket.CampaignEvent
import com.pixelized.shared.lwa.protocol.websocket.GameMasterEvent
import com.pixelized.shared.lwa.protocol.websocket.RestSynchronisation
import com.pixelized.shared.lwa.protocol.websocket.RollMessage
import com.pixelized.shared.lwa.protocol.websocket.RollEvent
import com.pixelized.shared.lwa.protocol.websocket.SocketMessage
import com.pixelized.shared.lwa.protocol.websocket.UpdateSkillUsageMessage
import lwacharactersheet.composeapp.generated.resources.Res
@ -37,7 +35,7 @@ class TextMessageFactory(
val id = formatId.format(time)
return when (message) {
is RollMessage -> {
is RollEvent -> {
val sheetPreview = characterSheetRepository
.characterPreview(characterId = message.characterSheetId)
?: return null
@ -54,18 +52,18 @@ class TextMessageFactory(
rollSuccessLimit = takeIf { isGm }?.let { message.rollSuccessLimit },
resultLabel = message.resultLabel,
resultType = when (message.critical) {
RollMessage.Critical.CRITICAL_SUCCESS -> RollTextMessageUio.Critical.CRITICAL_SUCCESS
RollMessage.Critical.SPECIAL_SUCCESS -> RollTextMessageUio.Critical.SPECIAL_SUCCESS
RollMessage.Critical.SUCCESS -> RollTextMessageUio.Critical.SUCCESS
RollMessage.Critical.FAILURE -> RollTextMessageUio.Critical.FAILURE
RollMessage.Critical.CRITICAL_FAILURE -> RollTextMessageUio.Critical.CRITICAL_FAILURE
RollEvent.Critical.CRITICAL_SUCCESS -> RollTextMessageUio.Critical.CRITICAL_SUCCESS
RollEvent.Critical.SPECIAL_SUCCESS -> RollTextMessageUio.Critical.SPECIAL_SUCCESS
RollEvent.Critical.SUCCESS -> RollTextMessageUio.Critical.SUCCESS
RollEvent.Critical.FAILURE -> RollTextMessageUio.Critical.FAILURE
RollEvent.Critical.CRITICAL_FAILURE -> RollTextMessageUio.Critical.CRITICAL_FAILURE
null -> null
}
)
}
is CampaignMessage -> when (message) {
is CampaignMessage.UpdateDiminished -> {
is CampaignEvent -> when (message) {
is CampaignEvent.UpdateDiminished -> {
val sheetPreview = characterSheetRepository
.characterPreview(characterId = message.characterSheetId)
?: return null
@ -78,7 +76,7 @@ class TextMessageFactory(
)
}
is CampaignMessage.UpdateCharacteristic -> {
is CampaignEvent.UpdateCharacteristic -> {
val sheet = characterSheetRepository.characterDetail(
characterSheetId = message.characterSheetId,
) ?: return null
@ -100,7 +98,7 @@ class TextMessageFactory(
)
}
is CampaignMessage.ToggleActiveAlteration -> null // TODO
is CampaignEvent.ToggleActiveAlteration -> null // TODO
}
is RestSynchronisation.Campaign -> null

View file

@ -14,7 +14,7 @@ import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.CharacterSheetDestination
import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.dialog.CharacterSheetDeleteConfirmationDialogUio
import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.dialog.DiminishedStatDialogUio
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.CampaignEvent
import com.pixelized.shared.lwa.protocol.websocket.UpdateSkillUsageMessage
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
@ -144,7 +144,7 @@ class CharacterSheetViewModel(
suspend fun changeDiminished(dialog: DiminishedStatDialogUio) {
val diminished = dialog.value().text.toIntOrNull() ?: 0
network.share(
message = CampaignMessage.UpdateDiminished(
message = CampaignEvent.UpdateDiminished(
timestamp = System.currentTimeMillis(),
prefix = dialog.characterInstanceId.prefix,
characterSheetId = dialog.characterInstanceId.characterSheetId,

View file

@ -3,7 +3,6 @@ package com.pixelized.desktop.lwa.ui.screen.gamemaster
import com.pixelized.desktop.lwa.repository.campaign.CampaignRepository
import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.ui.screen.gamemaster.items.GMCharacterUio.Action
import com.pixelized.shared.lwa.protocol.websocket.GameEvent
class GameMasterActionUseCase(
private val campaignRepository: CampaignRepository,