spring-boot-axon-demo/src/main/kotlin/com/cubetiqs/demo/axon/service/AccountCommandServiceImpl.kt
Sambo Chea d3e8d63287 completely implementation about cqrs and event sourcing
But not testing yet
And not yet for rest too for query
2020-08-21 11:30:40 +07:00

49 lines
1.7 KiB
Kotlin

package com.cubetiqs.demo.axon.service
import com.cubetiqs.demo.axon.command.CreateAccountCommand
import com.cubetiqs.demo.axon.command.CreditMoneyCommand
import com.cubetiqs.demo.axon.command.DebitMoneyCommand
import com.cubetiqs.demo.axon.dto.AccountCreationDTO
import com.cubetiqs.demo.axon.dto.MoneyAmountDTO
import com.cubetiqs.demo.axon.entity.BankAccount
import com.cubetiqs.demo.axon.util.text.formatUuid
import org.axonframework.commandhandling.gateway.CommandGateway
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.util.UUID
import java.util.concurrent.CompletableFuture
@Service
class AccountCommandServiceImpl @Autowired constructor(
private val commandGateway: CommandGateway
) : AccountCommandService {
override fun createAccount(creationDTO: AccountCreationDTO): CompletableFuture<BankAccount?> {
return commandGateway.send(
CreateAccountCommand(
UUID.randomUUID(),
creationDTO.initialBalance,
creationDTO.owner,
)
)
}
override fun creditMoneyToAccount(accountId: String?, moneyCreditDTO: MoneyAmountDTO): CompletableFuture<String?> {
return commandGateway.send(
CreditMoneyCommand(
accountId.formatUuid(),
moneyCreditDTO.amount
)
)
}
override fun debitMoneyFromAccount(accountId: String?, moneyDebitDTO: MoneyAmountDTO): CompletableFuture<String?> {
return commandGateway.send(
DebitMoneyCommand(
accountId.formatUuid(),
moneyDebitDTO.amount
)
)
}
}