Slide 246
Slide 246 text
override fun > update(clazz: Class, entityIdAndVersion: EntityIdAndVersion, events: List, option
val entityId = entityIdAndVersion.id
val currentVersion = entityIdAndVersion.version
val batch = TransactionalBatch.createTransactionalBatch(PartitionKey(entityId))
val container = getContainer()
val entityDocumentReadResponse = container.readItem(entityId, PartitionKey(entityId), EventSourcingDocument::class.java
val entityDocument = entityDocumentReadResponse.item
if (currentVersion != entityDocument.version) {
throw OptimisticConcurrencyException(entityId, currentVersion, entityDocument.version)
}
val eventDatamodels = events.mapIndexed { index, it ->
EventDataModel(
UUID.randomUUID().toString(),
it.javaClass.name,
clazz.name,
entityId,
currentVersion + index + 1,
Gson().toJson(it)
)
}
eventDatamodels.map(EventDataModel::toDocument).forEach {batch.createItemOperation(it)}
val latestVersion = eventDatamodels.last().version
val entity = EntityDataModel.from(entityDocument)
entity.version = latestVersion
val replaceEntityDocument = entity.toDocument()
batch.replaceItemOperation(entityId, replaceEntityDocument, TransactionalBatchItemRequestOptions().setIfMatchETag(entit