Skip to content

Commit

Permalink
✨feature : 사용자정보 업데이트 기능작업
Browse files Browse the repository at this point in the history
  • Loading branch information
ParkYunHo committed Aug 26, 2023
1 parent c8cbf73 commit fa67854
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.john.lotto.member.adapter.`in`.web.dto.MemberInput
import com.john.lotto.member.application.port.`in`.DeleteMemberUseCase
import com.john.lotto.member.application.port.`in`.FindMemberUseCase
import com.john.lotto.member.application.port.`in`.RegisterUseCase
import com.john.lotto.member.application.port.`in`.UpdateUseCase
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
import org.springframework.web.reactive.function.server.ServerRequest
Expand All @@ -20,6 +21,7 @@ import reactor.core.publisher.Mono
@Component
class MemberHandler(
private val registerUseCase: RegisterUseCase,
private val updateUseCase: UpdateUseCase,
private val findMemberUseCase: FindMemberUseCase,
private val deleteMemberUseCase: DeleteMemberUseCase
) {
Expand All @@ -39,6 +41,19 @@ class MemberHandler(
.flatMap { registerUseCase.register(userId = request.userId(), input = it) }
.flatMap { BaseResponse().success(it) }

/**
* 사용자 정보수정
*
* @param request [ServerRequest]
* @return [Mono]<[ServerResponse]>
* @author yoonho
* @since 2023.08.25
*/
fun update(request: ServerRequest): Mono<ServerResponse> =
request.bodyToMono(MemberInput::class.java)
.flatMap { return@flatMap Mono.just(it.validate()) }
.flatMap { updateUseCase.update(userId = request.userId(), input = it) }
.flatMap { BaseResponse().success(it) }

/**
* 사용자 조회
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,34 @@ class MemberRouter(
security = [SecurityRequirement(name = "OpenID Connection Authentication")]
)
),
RouterOperation(
path = "/api/member",
method = [RequestMethod.PATCH],
beanClass = MemberHandler::class,
beanMethod = "update",
operation = Operation(
tags = ["회원정보"],
summary = "회원정보 수정",
operationId = "update",
requestBody = RequestBody(
required = true,
description = "회원 수정정보",
content = [
Content(
schema = Schema(implementation = MemberInput::class)
)
]
),
responses = [
ApiResponse(
description = "수정된 회원정보",
responseCode = "200",
content = [Content(schema = Schema(implementation = MemberDto::class))]
)
],
security = [SecurityRequirement(name = "OpenID Connection Authentication")]
)
),
RouterOperation(
path = "/api/member",
method = [RequestMethod.GET],
Expand Down Expand Up @@ -101,6 +129,7 @@ class MemberRouter(
fun memberRouterFunction(): RouterFunction<ServerResponse> = router {
accept(MediaType.APPLICATION_JSON).nest {
POST("/api/member", memberHandler::register)
PATCH("/api/member", memberHandler::update)
GET("/api/member", memberHandler::search)
DELETE("/api/member", memberHandler::delete)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.john.lotto.member.application

import com.john.lotto.common.exception.BadRequestException
import com.john.lotto.common.exception.InternalServerException
import com.john.lotto.member.MemberRepository
import com.john.lotto.member.adapter.`in`.web.dto.MemberInput
import com.john.lotto.member.application.port.`in`.DeleteMemberUseCase
import com.john.lotto.member.application.port.`in`.FindMemberUseCase
import com.john.lotto.member.application.port.`in`.RegisterUseCase
import com.john.lotto.member.application.port.`in`.UpdateUseCase
import com.john.lotto.member.dto.MemberDto
import org.slf4j.LoggerFactory
import org.springframework.cache.annotation.Cacheable
Expand All @@ -20,7 +22,7 @@ import java.time.LocalDateTime
@Service
class MemberService(
private val memberRepository: MemberRepository
): RegisterUseCase, FindMemberUseCase, DeleteMemberUseCase {
): RegisterUseCase, FindMemberUseCase, DeleteMemberUseCase, UpdateUseCase {
private val log = LoggerFactory.getLogger(this::class.java)

/**
Expand All @@ -45,11 +47,44 @@ class MemberService(
updatedAt = null,
createdAt = LocalDateTime.now()
)
memberRepository.insertMember(param)
val result = memberRepository.insertMember(param)
if(result <= 0) {
throw InternalServerException("사용자 등록에 실패하였습니다.")
}

return Mono.just(param)
}

/**
* 사용자 정보수정
*
* @param userId [String]
* @param input [MemberInput]
* @return [Mono]<[MemberDto]>
* @author yoonho
* @since 2023.08.25
*/
override fun update(userId: String, input: MemberInput): Mono<MemberDto> {
val userInfo = memberRepository.findMember(userId = userId) ?: throw BadRequestException("미등록된 회원입니다 - userId: $userId")

// 이메일 업데이트
if(input.email.isNullOrEmpty()) {
userInfo.email = input.email!!
}

// 닉네임 업데이트
if(input.nickName.isNullOrEmpty()) {
userInfo.nickname = input.nickName!!
}

val result = memberRepository.updateMember(userInfo)
if(result <= 0) {
throw InternalServerException("사용자 정보수정에 실패하였습니다.")
}

return Mono.just(userInfo)
}

/**
* 사용자 조회
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.john.lotto.member.application.port.`in`

import com.john.lotto.member.adapter.`in`.web.dto.MemberInput
import com.john.lotto.member.dto.MemberDto
import reactor.core.publisher.Mono

/**
* @author yoonho
* @since 2023.08.25
*/
interface UpdateUseCase {

/**
* 사용자 정보수정
*
* @param userId [String]
* @param input [MemberInput]
* @return [Mono]<[MemberDto]>
* @author yoonho
* @since 2023.08.25
*/
fun update(userId: String, input: MemberInput): Mono<MemberDto>
}
19 changes: 19 additions & 0 deletions core/src/main/kotlin/com/john/lotto/member/MemberRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.john.lotto.member
import com.john.lotto.entity.personal.QMember
import com.john.lotto.member.dto.MemberDto
import com.john.lotto.member.dto.QMemberDto
import com.querydsl.core.types.dsl.BooleanExpression
import com.querydsl.jpa.impl.JPAQueryFactory
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Qualifier
Expand Down Expand Up @@ -50,6 +51,24 @@ class MemberRepository(
)
.execute()

/**
* 회원정보 수정
*
* @param input [MemberDto]
* @return [Long]
* @author yoonho
* @since 2023.08.26
*/
@Transactional
fun updateMember(input: MemberDto): Long =
queryFactory
.update(memberEntity)
.set(memberEntity.email, input.email)
.set(memberEntity.nickname, input.nickname)
.where(memberEntity.userId.eq(input.userId))
.execute()


/**
* 회원정보 조회
*
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/kotlin/com/john/lotto/member/dto/MemberDto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import java.time.LocalDateTime
data class MemberDto @QueryProjection constructor(
val userId: String,

val email: String,
val nickname: String,
var email: String,
var nickname: String,

@field:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
val updatedAt: LocalDateTime? = null,
Expand Down

0 comments on commit fa67854

Please sign in to comment.