Add purse update chatlog message

This commit is contained in:
Thomas Andres Gomez 2025-05-09 15:18:39 +02:00
parent 06c5802d7a
commit 5b633de981
16 changed files with 327 additions and 16 deletions

View file

@ -5,6 +5,7 @@ import com.pixelized.server.lwa.server.exception.BusinessException
import com.pixelized.shared.lwa.model.inventory.Inventory
import com.pixelized.shared.lwa.model.inventory.InventoryJson
import com.pixelized.shared.lwa.model.inventory.factory.InventoryJsonFactory
import com.pixelized.shared.lwa.protocol.rest.ApiPurseJson
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -38,6 +39,25 @@ class InventoryService(
?: factory.convertToJson(Inventory.empty(characterSheetId = characterSheetId))
}
@Throws
fun updatePurse(
purse: ApiPurseJson,
) {
val inventory = inventory(
characterSheetId = purse.characterSheetId
)
inventoryStore.save(
inventory = inventory.copy(
purse = inventory.purse.copy(
gold = inventory.purse.gold + purse.gold,
silver = inventory.purse.silver + purse.silver,
copper = inventory.purse.copper + purse.copper,
),
),
create = false,
)
}
@Throws
fun save(
inventoryJson: InventoryJson,

View file

@ -28,6 +28,7 @@ import com.pixelized.server.lwa.server.rest.inventory.deleteInventory
import com.pixelized.server.lwa.server.rest.inventory.deleteInventoryItem
import com.pixelized.server.lwa.server.rest.inventory.getInventory
import com.pixelized.server.lwa.server.rest.inventory.putInventory
import com.pixelized.server.lwa.server.rest.inventory.putPurse
import com.pixelized.server.lwa.server.rest.item.deleteItem
import com.pixelized.server.lwa.server.rest.item.getItem
import com.pixelized.server.lwa.server.rest.item.getItems
@ -272,6 +273,10 @@ class LocalServer {
path = "/update",
body = engine.putInventory()
)
put(
path = "/update/purse",
body = engine.putPurse(),
)
delete(
path = "/delete",
body = engine.deleteInventory()

View file

@ -0,0 +1,41 @@
package com.pixelized.server.lwa.server.rest.inventory
import com.pixelized.server.lwa.server.Engine
import com.pixelized.server.lwa.utils.extentions.exception
import com.pixelized.shared.lwa.protocol.rest.APIResponse
import com.pixelized.shared.lwa.protocol.rest.ApiPurseJson
import com.pixelized.shared.lwa.protocol.websocket.ApiSynchronisation
import io.ktor.server.request.receive
import io.ktor.server.response.respond
import io.ktor.server.routing.RoutingContext
fun Engine.putPurse(): suspend RoutingContext.() -> Unit {
return {
try {
// get the query parameter
val form = call.receive<ApiPurseJson>()
// get the character inventory
inventoryService.updatePurse(
purse = form,
)
// send it back to the user.
call.respond(
message = APIResponse.success()
)
webSocket.emit(
value = ApiSynchronisation.PurseUpdate(
timestamp = System.currentTimeMillis(),
characterSheetId = form.characterSheetId,
add = (form.gold * 10000 + form.silver * 100 + form.copper) >= 0,
gold = form.gold,
silver = form.silver,
copper = form.copper,
),
)
} catch (exception: Exception) {
call.exception(
exception = exception
)
}
}
}