Add the old ui to the new one.

This commit is contained in:
Thomas Andres Gomez 2025-02-27 19:15:06 +01:00
parent d8ce46fe43
commit f51a83cf6e
38 changed files with 635 additions and 250 deletions

View file

@ -2,7 +2,7 @@ package com.pixelized.server.lwa.model.alteration
import com.pixelized.shared.lwa.model.alteration.AlterationJson
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -19,7 +19,7 @@ class AlterationService(
private val actives = store.activeFlow()
.map { data ->
data.mapKeys { it: Map.Entry<String, List<String>> ->
campaignJsonFactory.convertFromV1(characterInstanceIdJson = it.key)
campaignJsonFactory.characterInstanceIdFromJson(characterInstanceIdJson = it.key)
}
}.stateIn(
scope = scope,

View file

@ -3,14 +3,13 @@ package com.pixelized.server.lwa.model.alteration
import com.pixelized.shared.lwa.alterationsPath
import com.pixelized.shared.lwa.model.alteration.AlterationJson
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.io.File

View file

@ -2,8 +2,8 @@ package com.pixelized.server.lwa.model.campaign
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJson
import com.pixelized.shared.lwa.model.campaign.CampaignJsonFactory
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.usecase.CampaignUseCase
import kotlinx.coroutines.CoroutineScope
@ -47,10 +47,14 @@ class CampaignService(
// update the corresponding character
characters[characterInstanceId] = campaign.character(id = characterInstanceId)
// save the campaign to the disk + update the flow.
store.save(
campaign = campaign.copy(characters = characters)
)
return true
return try {
store.save(
campaign = campaign.copy(characters = characters)
)
true
} catch (exception: Exception) {
false
}
}
suspend fun removeCharacter(
@ -63,10 +67,14 @@ class CampaignService(
// update the corresponding character
characters.remove(characterInstanceId)
// save the campaign to the disk + update the flow.
store.save(
campaign = campaign.copy(characters = characters)
)
return true
return try {
store.save(
campaign = campaign.copy(characters = characters)
)
true
} catch (exception: Exception) {
false
}
}
suspend fun addNpc(
@ -79,10 +87,14 @@ class CampaignService(
// update the corresponding character
npcs[npcInstanceId] = campaign.npc(id = npcInstanceId)
// save the campaign to the disk + update the flow.
store.save(
campaign = campaign.copy(npcs = npcs)
)
return true
return try {
store.save(
campaign = campaign.copy(npcs = npcs)
)
true
} catch (exception: Exception) {
false
}
}
suspend fun removeNpc(
@ -95,10 +107,28 @@ class CampaignService(
// update the corresponding character
npcs.remove(npcInstanceId)
// save the campaign to the disk + update the flow.
store.save(
campaign = campaign.copy(npcs = npcs)
)
return true
return try {
store.save(
campaign = campaign.copy(npcs = npcs)
)
true
} catch (exception: Exception) {
false
}
}
suspend fun setScene(
scene: Campaign.Scene,
): Boolean {
// save the campaign to the disk + update the flow.
return try {
store.save(
campaign.copy(scene = scene)
)
true
} catch (exception: Exception) {
false
}
}
// Data manipulation through WebSocket.

View file

@ -3,7 +3,7 @@ package com.pixelized.server.lwa.model.campaign
import com.pixelized.shared.lwa.campaignPath
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJson
import com.pixelized.shared.lwa.model.campaign.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job

View file

@ -4,7 +4,7 @@ import com.pixelized.server.lwa.model.alteration.AlterationService
import com.pixelized.server.lwa.model.campaign.CampaignService
import com.pixelized.server.lwa.model.character.CharacterSheetService
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import com.pixelized.shared.lwa.protocol.websocket.Message
import com.pixelized.shared.lwa.protocol.websocket.payload.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.payload.RestSynchronisation
@ -33,7 +33,7 @@ class Engine(
when (data) {
is CampaignMessage.UpdateCharacteristic -> campaignService.updateCharacteristic(
characterInstanceId = instanceId,
characteristic = campaignJsonFactory.convertFromV1(characteristicJson = data.characteristic),
characteristic = campaignJsonFactory.convertFromJson(json = data.characteristic),
value = data.value,
)

View file

@ -11,6 +11,7 @@ import com.pixelized.server.lwa.server.rest.campaign.deleteCampaignNpc
import com.pixelized.server.lwa.server.rest.campaign.getCampaign
import com.pixelized.server.lwa.server.rest.campaign.putCampaignCharacter
import com.pixelized.server.lwa.server.rest.campaign.putCampaignNpc
import com.pixelized.server.lwa.server.rest.campaign.putCampaignScene
import com.pixelized.server.lwa.server.rest.character.deleteCharacter
import com.pixelized.server.lwa.server.rest.character.getCharacter
import com.pixelized.server.lwa.server.rest.character.getCharacters
@ -146,6 +147,10 @@ class LocalServer {
body = engine.deleteCampaignNpc(),
)
}
put(
path = "/scene",
body = engine.putCampaignScene(),
)
}
route(path = "/alterations") {
get(

View file

@ -0,0 +1,38 @@
package com.pixelized.server.lwa.server.rest.campaign
import com.pixelized.server.lwa.server.Engine
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheetJson
import com.pixelized.shared.lwa.protocol.websocket.Message
import com.pixelized.shared.lwa.protocol.websocket.payload.RestSynchronisation
import io.ktor.http.HttpStatusCode
import io.ktor.server.request.receive
import io.ktor.server.response.respondText
fun Engine.putCampaignScene(): suspend io.ktor.server.routing.RoutingContext.() -> Unit {
return {
val form = call.receive<CampaignJsonV1.SceneJsonV1>()
val scene = campaignJsonFactory.convertFromJson(json = form)
val updated = campaignService.setScene(scene = scene)
val code = when (updated) {
true -> HttpStatusCode.Accepted
else -> HttpStatusCode.UnprocessableEntity
}
call.respondText(
text = "$code",
status = code,
)
webSocket.emit(
Message(
from = "Server",
value = RestSynchronisation.Campaign,
)
)
}
}