spring-graphql-demo/dgs-graphql/src/main/kotlin/com/cubetiqs/graphql/demo/resolver/mutation/AccountMutationResolver.kt

32 lines
1.3 KiB
Kotlin

package com.cubetiqs.graphql.demo.resolver.mutation
import com.cubetiqs.graphql.demo.context.GMutation
import com.cubetiqs.graphql.demo.dgmodel.DgsConstants
import com.cubetiqs.graphql.demo.domain.account.Account
import com.cubetiqs.graphql.demo.domain.account.AccountInput
import com.cubetiqs.graphql.demo.domain.account.AccountMapper
import com.cubetiqs.graphql.demo.repository.AccountRepository
import com.cubetiqs.graphql.demo.repository.UserRepository
import com.netflix.graphql.dgs.DgsMutation
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.transaction.annotation.Propagation
import org.springframework.transaction.annotation.Transactional
@GMutation
class AccountMutationResolver {
@Autowired
private lateinit var accountRepository: AccountRepository
@Autowired
private lateinit var userRepository: UserRepository
@DgsMutation(field = DgsConstants.MUTATION.OpenAccount)
@Transactional(propagation = Propagation.REQUIRES_NEW)
fun openAccount(input: AccountInput): Account {
val account = AccountMapper.fromInputToAccount(input)
val user = userRepository.findById(input.userId ?: 0).orElse(null)
?: throw Exception("User not found to open an account!")
account.user = user
return accountRepository.save(account)
}
}