diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterPersistenceAdapter.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterPersistenceAdapter.kt new file mode 100644 index 0000000..5d8e3ae --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterPersistenceAdapter.kt @@ -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) + } +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterRequest.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterRequest.kt new file mode 100644 index 0000000..0efda0a --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterRequest.kt @@ -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) + } +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterResponse.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterResponse.kt new file mode 100644 index 0000000..c97e285 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterResponse.kt @@ -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 + ) +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterWebAdapter.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterWebAdapter.kt new file mode 100644 index 0000000..c9ae005 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/adapter/register/UserRegisterWebAdapter.kt @@ -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 { + val requestData = userRegisterRequest.toData() + val responseData = userRegisterUseCase.registerUser(requestData) + return ResponseEntity.ok(UserRegisterResponse(responseData)) + } +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterPersistencePort.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterPersistencePort.kt new file mode 100644 index 0000000..96b64ee --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterPersistencePort.kt @@ -0,0 +1,7 @@ +package com.banjjoknim.springmultimodule.user.application.register + +import com.banjjoknim.springmultimodule.user.User + +interface UserRegisterPersistencePort { + fun registerUser(user: User): User +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterRequestData.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterRequestData.kt new file mode 100644 index 0000000..5fe8a98 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterRequestData.kt @@ -0,0 +1,3 @@ +package com.banjjoknim.springmultimodule.user.application.register + +data class UserRegisterRequestData(val name: String) diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterResponseData.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterResponseData.kt new file mode 100644 index 0000000..286667d --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterResponseData.kt @@ -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 + ) +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterService.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterService.kt new file mode 100644 index 0000000..8e95320 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterService.kt @@ -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) + } +} diff --git a/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterUseCase.kt b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterUseCase.kt new file mode 100644 index 0000000..dbb0d85 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-multi-module/module-api/src/main/kotlin/com/banjjoknim/springmultimodule/user/application/register/UserRegisterUseCase.kt @@ -0,0 +1,5 @@ +package com.banjjoknim.springmultimodule.user.application.register + +interface UserRegisterUseCase { + fun registerUser(requestData: UserRegisterRequestData): UserRegisterResponseData +}