From 4caac765142744ffa89f2565928ba6af850d681c Mon Sep 17 00:00:00 2001 From: Hanbin Lee Date: Sat, 31 Dec 2022 19:43:42 +0900 Subject: [PATCH] =?UTF-8?q?[#26]=20feat:=20ApplicationResponse=20Builder?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ApplicationResponse Generic type 지정하기 위해 중간 팩토리 클래스 적용 (ApplicationResponseBuilder) --- .../dongnecafe/controller/AuthController.kt | 2 +- .../dongnecafe/controller/MemberController.kt | 2 +- .../error/advice/BasicControllerAdvice.kt | 8 +-- .../common/response/ApplicationResponse.kt | 71 +++++++++---------- .../common/config/SecurityConfig.kt | 1 + .../domain/cafe/controller/CafeController.kt | 15 ++-- .../cafe/controller/CafeMenuController.kt | 21 ++++-- 7 files changed, 66 insertions(+), 54 deletions(-) diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt index 4ee6fc1..92ab5d8 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt @@ -17,7 +17,7 @@ class AuthController( private val jwtTokenUtils: JwtTokenUtils ) { @PostMapping("/authenticate") - fun signIn(@RequestBody signInRequest: SignInRequest): ApplicationResponse { + fun signIn(@RequestBody signInRequest: SignInRequest): ApplicationResponse { val authentication = authService.signIn( email = signInRequest.email, password = signInRequest.password diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt index 2782d3d..a61b158 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/MemberController.kt @@ -14,7 +14,7 @@ class MemberController( private val memberService: MemberService ) { @PostMapping("/sign-up") - fun signUp(@RequestBody resource: MemberRegisterRequest): ApplicationResponse { + fun signUp(@RequestBody resource: MemberRegisterRequest): ApplicationResponse { val registerMemberId = memberService.registerMember(resource) return ApplicationResponse diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/advice/BasicControllerAdvice.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/advice/BasicControllerAdvice.kt index ed9b7de..e5748fb 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/advice/BasicControllerAdvice.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/advice/BasicControllerAdvice.kt @@ -20,9 +20,9 @@ class BasicControllerAdvice { */ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception::class) - fun handleException(e: Exception): ApplicationResponse { + fun handleException(e: Exception): ApplicationResponse { logger.error { "[COMMON][${e.javaClass.simpleName}] $e" } - return ApplicationResponse.fail(errorCode = ErrorCode.COMMON_SERVER_ERROR) + return ApplicationResponse.fail(errorCode = ErrorCode.COMMON_SERVER_ERROR).build() } /** @@ -31,8 +31,8 @@ class BasicControllerAdvice { */ @ResponseStatus(HttpStatus.OK) @ExceptionHandler(BusinessException::class) - fun handleBusinessException(e: BusinessException): ApplicationResponse { + fun handleBusinessException(e: BusinessException): ApplicationResponse { logger.error { "[${BusinessException::class.simpleName}] : ${e.errorCode.name}, : ${e.message}" } - return ApplicationResponse.fail(errorCode = e.errorCode) + return ApplicationResponse.fail(errorCode = e.errorCode).build() } } \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/response/ApplicationResponse.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/response/ApplicationResponse.kt index 054efa3..5f4bae9 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/response/ApplicationResponse.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/response/ApplicationResponse.kt @@ -4,47 +4,46 @@ import com.fasterxml.jackson.annotation.JsonInclude import io.beaniejoy.dongnecafe.common.error.constant.ErrorCode @JsonInclude(JsonInclude.Include.NON_NULL) -class ApplicationResponse { - var result: ResultCode - private set - - var data: Any? = null - private set - - var message: String? - private set - - var errorCode: String? = null - private set - - constructor(resultCode: ResultCode, message: String?) { - this.result = resultCode - this.message = message - } - - constructor(resultCode: ResultCode, errorCode: ErrorCode, message: String?) { - this.result = resultCode - this.errorCode = errorCode.name - this.message = message - } - +class ApplicationResponse( + val result: ResultCode, + val message: String? = null, + val errorCode: String? = null, + val data: T? = null +) { companion object { - fun success(message: String? = null): ApplicationResponse { - return ApplicationResponse(resultCode = ResultCode.SUCCESS, message = message) - } - - fun fail(errorCode: ErrorCode, message: String? = null): ApplicationResponse { - return ApplicationResponse( - resultCode = ResultCode.FAIL, - errorCode = errorCode, + fun success(message: String? = null): ApplicationResponseBuilder { + return ApplicationResponseBuilder( + result = ResultCode.SUCCESS, message = message ) } + + fun fail(errorCode: ErrorCode, message: String? = null): ApplicationResponseBuilder { + return ApplicationResponseBuilder( + result = ResultCode.FAIL, + message = message, + errorCode = errorCode.name + ) + } + } +} + +class ApplicationResponseBuilder( + var result: ResultCode, + var message: String? = null, + var errorCode: String? = null +) { + fun build(): ApplicationResponse { + return data(null) } - fun data(data: Any): ApplicationResponse { - this.data = data - - return this + fun data(data: T?): ApplicationResponse { + return ApplicationResponse( + result = this.result, + message = this.message, + data = data, + errorCode = errorCode + ) } + } \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 9a89442..50252a0 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -24,6 +24,7 @@ class SecurityConfig { .csrf().disable() .formLogin().disable() + // FIXME 임시 permitAll 설정 .authorizeRequests() .anyRequest().permitAll() diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt index 5b59c65..39341e1 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeController.kt @@ -3,7 +3,10 @@ package io.beaniejoy.dongnecafe.domain.cafe.controller import io.beaniejoy.dongnecafe.common.response.ApplicationResponse import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeRegisterRequest import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeUpdateRequest +import io.beaniejoy.dongnecafe.domain.cafe.model.response.CafeDetailedInfo +import io.beaniejoy.dongnecafe.domain.cafe.model.response.CafeSearchInfo import io.beaniejoy.dongnecafe.domain.cafe.service.CafeService +import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable import org.springframework.data.domain.Sort import org.springframework.data.web.PageableDefault @@ -18,7 +21,7 @@ class CafeController( * 신규 카페 생성 */ @PostMapping - fun createNewCafe(@RequestBody resource: CafeRegisterRequest): ApplicationResponse { + fun createNewCafe(@RequestBody resource: CafeRegisterRequest): ApplicationResponse { val newCafeId = cafeService.createNew( name = resource.name!!, address = resource.address!!, @@ -38,7 +41,7 @@ class CafeController( @GetMapping fun searchCafeList( @PageableDefault(sort = ["name"], direction = Sort.Direction.ASC, page = 0, size = 10) pageable: Pageable - ): ApplicationResponse { + ): ApplicationResponse> { val searchCafes = cafeService.searchCafeList(pageable) return ApplicationResponse @@ -50,7 +53,7 @@ class CafeController( * 단일 카페 상세 조회 */ @GetMapping("/{id}") - fun getDetailedInfo(@PathVariable("id") id: Long): ApplicationResponse { + fun getDetailedInfo(@PathVariable("id") id: Long): ApplicationResponse { val cafeDetailedInfo = cafeService.getDetailedInfoByCafeId(id) return ApplicationResponse @@ -66,7 +69,7 @@ class CafeController( fun updateInfo( @PathVariable("id") id: Long, @RequestBody resource: CafeUpdateRequest - ): ApplicationResponse { + ): ApplicationResponse { cafeService.updateInfo( id = id, name = resource.name!!, @@ -75,6 +78,8 @@ class CafeController( description = resource.description!! ) - return ApplicationResponse.success("Successfully Cafe[$id] Info Updated") + return ApplicationResponse + .success("Successfully Cafe[$id] Info Updated") + .build() } } \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt index 7695069..3219804 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/controller/CafeMenuController.kt @@ -3,6 +3,7 @@ package io.beaniejoy.dongnecafe.domain.cafe.controller import io.beaniejoy.dongnecafe.common.response.ApplicationResponse import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeMenuBulkDeleteRequest import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeMenuUpdateRequest +import io.beaniejoy.dongnecafe.domain.cafe.model.response.CafeMenuDetailedInfo import io.beaniejoy.dongnecafe.domain.cafe.service.CafeMenuService import org.springframework.web.bind.annotation.* @@ -18,7 +19,7 @@ class CafeMenuController( fun getDetailedInfo( @PathVariable("cafeId") cafeId: Long, @PathVariable("menuId") menuId: Long - ): ApplicationResponse { + ): ApplicationResponse { val cafeMenuDetailedInfo = cafeMenuService.getDetailedInfoByMenuId( menuId = menuId, cafeId = cafeId @@ -40,14 +41,16 @@ class CafeMenuController( @PathVariable("cafeId") cafeId: Long, @PathVariable("menuId") menuId: Long, @RequestBody cafeMenuUpdateRequest: CafeMenuUpdateRequest - ): ApplicationResponse { + ): ApplicationResponse { cafeMenuService.updateInfoAndBulkUpdate( menuId = menuId, cafeId = cafeId, resource = cafeMenuUpdateRequest ) - return ApplicationResponse.success("Success Update Cafe[$cafeId]'s CafeMenu[$menuId]") + return ApplicationResponse + .success("Success Update Cafe[$cafeId]'s CafeMenu[$menuId]") + .build() } /** @@ -57,13 +60,15 @@ class CafeMenuController( fun delete( @PathVariable("cafeId") cafeId: Long, @PathVariable("menuId") menuId: Long - ): ApplicationResponse { + ): ApplicationResponse { cafeMenuService.deleteByCafeMenuId( menuId = menuId, cafeId = cafeId ) - return ApplicationResponse.success("Success Delete Cafe[$cafeId]'s CafeMenu[$menuId]") + return ApplicationResponse + .success("Success Delete Cafe[$cafeId]'s CafeMenu[$menuId]") + .build() } /** @@ -73,9 +78,11 @@ class CafeMenuController( fun bulkDelete( @PathVariable("cafeId") cafeId: Long, @RequestBody resource: CafeMenuBulkDeleteRequest - ): ApplicationResponse { + ): ApplicationResponse { cafeMenuService.bulkDelete(cafeId, resource.cafeMenuIdList) - return ApplicationResponse.success("Success Delete Cafe[$cafeId]'s CafeMenu List") + return ApplicationResponse + .success("Success Delete Cafe[$cafeId]'s CafeMenu List") + .build() } } \ No newline at end of file