diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt index f9aa17c..425add6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt @@ -7,6 +7,7 @@ import kr.co.vividnext.sodalive.member.notification.UpdateNotificationSettingReq import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.PutMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam @@ -45,4 +46,20 @@ class MemberController(private val service: MemberService) { ApiResponse.ok(service.updateNotificationSettings(request, member)) } + + @PutMapping("/push-token/update") + fun updatePushToken( + @RequestBody pushTokenUpdateRequest: PushTokenUpdateRequest, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok( + service.updatePushToken( + memberId = member.id!!, + pushToken = pushTokenUpdateRequest.pushToken, + container = pushTokenUpdateRequest.container + ) + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt index d5d41ce..011d73a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.member import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.member.QMember.member import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository @@ -10,7 +11,16 @@ interface MemberRepository : JpaRepository, MemberQueryRepository fun findByNickname(nickname: String): Member? } -interface MemberQueryRepository +interface MemberQueryRepository { + fun findByPushToken(pushToken: String): List +} @Repository -class MemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : MemberQueryRepository +class MemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : MemberQueryRepository { + override fun findByPushToken(pushToken: String): List { + return queryFactory + .selectFrom(member) + .where(member.pushToken.eq(pushToken)) + .fetch() + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt index a905bbf..59e3eb0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt @@ -107,6 +107,20 @@ class MemberService( ) } + @Transactional + fun updatePushToken(memberId: Long, pushToken: String, container: String) { + val existsHavePushTokenMemberList = repository.findByPushToken(pushToken = pushToken) + for (existsHavePushTokenMember in existsHavePushTokenMemberList) { + existsHavePushTokenMember.pushToken = null + } + + val member = repository.findByIdOrNull(id = memberId) + ?: throw SodaException("로그인 정보를 확인해주세요.") + + member.pushToken = pushToken + member.container = container + } + private fun login( email: String, password: String, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/PushTokenUpdateRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/PushTokenUpdateRequest.kt new file mode 100644 index 0000000..a379f5f --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/PushTokenUpdateRequest.kt @@ -0,0 +1,3 @@ +package kr.co.vividnext.sodalive.member + +data class PushTokenUpdateRequest(val pushToken: String, val container: String)