feat(user) : 회원 등록 기능 구현

This commit is contained in:
banjjoknim
2022-05-01 04:08:57 +09:00
parent 5c7a9c55af
commit 747286b6ec
9 changed files with 102 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
package com.banjjoknim.springmultimodule.user.adapter.register
import com.banjjoknim.springmultimodule.user.User
import com.banjjoknim.springmultimodule.user.UserRepository
import com.banjjoknim.springmultimodule.user.application.register.UserRegisterPersistencePort
import org.springframework.stereotype.Repository
@Repository
class UserRegisterPersistenceAdapter(
private val userRepository: UserRepository
) : UserRegisterPersistencePort {
override fun registerUser(user: User): User {
return userRepository.save(user)
}
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.springmultimodule.user.adapter.register
import com.banjjoknim.springmultimodule.user.application.register.UserRegisterRequestData
import javax.validation.constraints.NotBlank
data class UserRegisterRequest(
@NotBlank
val name: String = ""
) {
fun toData(): UserRegisterRequestData {
return UserRegisterRequestData(name)
}
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.springmultimodule.user.adapter.register
import com.banjjoknim.springmultimodule.user.application.register.UserRegisterResponseData
data class UserRegisterResponse(
val userId: Long
) {
constructor(responseData: UserRegisterResponseData) : this(
userId = responseData.userId
)
}

View File

@@ -0,0 +1,22 @@
package com.banjjoknim.springmultimodule.user.adapter.register
import com.banjjoknim.springmultimodule.user.application.register.UserRegisterUseCase
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import javax.validation.Valid
@RequestMapping("/users")
@RestController
class UserRegisterWebAdapter(
private val userRegisterUseCase: UserRegisterUseCase
) {
@PostMapping("")
fun registerUser(@RequestBody @Valid userRegisterRequest: UserRegisterRequest): ResponseEntity<UserRegisterResponse> {
val requestData = userRegisterRequest.toData()
val responseData = userRegisterUseCase.registerUser(requestData)
return ResponseEntity.ok(UserRegisterResponse(responseData))
}
}

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.springmultimodule.user.application.register
import com.banjjoknim.springmultimodule.user.User
interface UserRegisterPersistencePort {
fun registerUser(user: User): User
}

View File

@@ -0,0 +1,3 @@
package com.banjjoknim.springmultimodule.user.application.register
data class UserRegisterRequestData(val name: String)

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.springmultimodule.user.application.register
import com.banjjoknim.springmultimodule.user.User
data class UserRegisterResponseData(val userId: Long) {
constructor(user: User) : this(
userId = user.id
)
}

View File

@@ -0,0 +1,17 @@
package com.banjjoknim.springmultimodule.user.application.register
import com.banjjoknim.springmultimodule.user.User
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
@Service
class UserRegisterService(
private val userRegisterPersistencePort: UserRegisterPersistencePort
) : UserRegisterUseCase {
@Transactional
override fun registerUser(requestData: UserRegisterRequestData): UserRegisterResponseData {
val newUser = User(name = requestData.name)
val user = userRegisterPersistencePort.registerUser(newUser)
return UserRegisterResponseData(user)
}
}

View File

@@ -0,0 +1,5 @@
package com.banjjoknim.springmultimodule.user.application.register
interface UserRegisterUseCase {
fun registerUser(requestData: UserRegisterRequestData): UserRegisterResponseData
}