spring-boot-axon-demo/src/main/kotlin/com/cubetiqs/demo/axon/service/AccountCommandServiceImpl.kt
Sambo Chea 05431bd77b add projection
add dtos
Add exception for account
add repository
add account service command
2020-08-21 11:18:15 +07:00

50 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 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(
formatUuid(accountId),
moneyCreditDTO.amount
)
)
}
override fun debitMoneyFromAccount(accountId: String?, moneyDebitDTO: MoneyAmountDTO): CompletableFuture<String?> {
return commandGateway.send(
DebitMoneyCommand(
formatUuid(accountId),
moneyDebitDTO.amount
)
)
}
private fun formatUuid(accountId: String?): UUID {
return UUID.fromString(accountId)
}
}