From ac09de91416cc9b7ae973737756679f448699c47 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 24 Jul 2023 14:40:41 +0900 Subject: [PATCH] =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=ED=9B=84=20=EC=B4=88=EA=B8=B0=20=EC=95=8C=EB=A6=BC=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/member/MemberController.kt | 11 ++++++++ .../sodalive/member/MemberService.kt | 14 ++++++++++ .../MemberNotificationRepository.kt | 25 +++++++++++++++++ .../notification/MemberNotificationService.kt | 27 +++++++++++++++++++ .../UpdateNotificationSettingRequest.kt | 7 +++++ 5 files changed, 84 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationRepository.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationService.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/member/notification/UpdateNotificationSettingRequest.kt 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 6bbec6a..f9aa17c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt @@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.member import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.member.login.LoginRequest +import kr.co.vividnext.sodalive.member.notification.UpdateNotificationSettingRequest import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PostMapping @@ -34,4 +35,14 @@ class MemberController(private val service: MemberService) { ApiResponse.ok(service.getMemberInfo(member, container ?: "web")) } + + @PostMapping("/notification") + fun updateNotificationSettings( + @RequestBody request: UpdateNotificationSettingRequest, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok(service.updateNotificationSettings(request, member)) + } } 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 263db54..55ed5d6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt @@ -9,6 +9,8 @@ import kr.co.vividnext.sodalive.jwt.TokenProvider import kr.co.vividnext.sodalive.member.info.GetMemberInfoResponse import kr.co.vividnext.sodalive.member.login.LoginRequest import kr.co.vividnext.sodalive.member.login.LoginResponse +import kr.co.vividnext.sodalive.member.notification.MemberNotificationService +import kr.co.vividnext.sodalive.member.notification.UpdateNotificationSettingRequest import kr.co.vividnext.sodalive.member.signUp.SignUpRequest import kr.co.vividnext.sodalive.member.stipulation.Stipulation import kr.co.vividnext.sodalive.member.stipulation.StipulationAgree @@ -36,6 +38,8 @@ class MemberService( private val stipulationRepository: StipulationRepository, private val stipulationAgreeRepository: StipulationAgreeRepository, + private val memberNotificationService: MemberNotificationService, + private val s3Uploader: S3Uploader, private val validator: SignUpValidator, private val tokenProvider: TokenProvider, @@ -92,6 +96,16 @@ class MemberService( ) } + @Transactional + fun updateNotificationSettings(request: UpdateNotificationSettingRequest, member: Member) { + memberNotificationService.updateNotification( + live = request.live, + uploadContent = request.uploadContent, + message = request.message, + member = member + ) + } + private fun login( email: String, password: String, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationRepository.kt new file mode 100644 index 0000000..6d461d9 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationRepository.kt @@ -0,0 +1,25 @@ +package kr.co.vividnext.sodalive.member.notification + +import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.member.notification.QMemberNotification.memberNotification +import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.stereotype.Repository + +@Repository +interface MemberNotificationRepository : JpaRepository, MemberNotificationQueryRepository + +interface MemberNotificationQueryRepository { + fun getMemberNotification(memberId: Long): MemberNotification? +} + +@Repository +class MemberNotificationQueryRepositoryImpl( + private val queryFactory: JPAQueryFactory +) : MemberNotificationQueryRepository { + override fun getMemberNotification(memberId: Long): MemberNotification? { + return queryFactory + .selectFrom(memberNotification) + .where(memberNotification.member.id.eq(memberId)) + .fetchFirst() + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationService.kt new file mode 100644 index 0000000..d46fc53 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/MemberNotificationService.kt @@ -0,0 +1,27 @@ +package kr.co.vividnext.sodalive.member.notification + +import kr.co.vividnext.sodalive.member.Member +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +@Service +@Transactional(readOnly = true) +class MemberNotificationService(private val repository: MemberNotificationRepository) { + fun updateNotification( + live: Boolean? = null, + uploadContent: Boolean? = null, + message: Boolean? = null, + member: Member + ) { + var notification = repository.getMemberNotification(memberId = member.id!!) + if (notification == null) { + notification = MemberNotification(uploadContent, live, message) + notification.member = member + repository.save(notification) + } else { + if (live != null) notification.live = live + if (message != null) notification.message = message + if (uploadContent != null) notification.uploadContent = uploadContent + } + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/UpdateNotificationSettingRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/UpdateNotificationSettingRequest.kt new file mode 100644 index 0000000..e9bc210 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/notification/UpdateNotificationSettingRequest.kt @@ -0,0 +1,7 @@ +package kr.co.vividnext.sodalive.member.notification + +data class UpdateNotificationSettingRequest( + val live: Boolean?, + val message: Boolean?, + val uploadContent: Boolean? +)