회원가입 후 초기 알림설정 기능 추가

This commit is contained in:
Klaus 2023-07-24 14:40:41 +09:00
parent 53a64d9bd7
commit ac09de9141
5 changed files with 84 additions and 0 deletions

View File

@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.member
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.member.login.LoginRequest 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.security.core.annotation.AuthenticationPrincipal
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PostMapping
@ -34,4 +35,14 @@ class MemberController(private val service: MemberService) {
ApiResponse.ok(service.getMemberInfo(member, container ?: "web")) 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))
}
} }

View File

@ -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.info.GetMemberInfoResponse
import kr.co.vividnext.sodalive.member.login.LoginRequest import kr.co.vividnext.sodalive.member.login.LoginRequest
import kr.co.vividnext.sodalive.member.login.LoginResponse 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.signUp.SignUpRequest
import kr.co.vividnext.sodalive.member.stipulation.Stipulation import kr.co.vividnext.sodalive.member.stipulation.Stipulation
import kr.co.vividnext.sodalive.member.stipulation.StipulationAgree import kr.co.vividnext.sodalive.member.stipulation.StipulationAgree
@ -36,6 +38,8 @@ class MemberService(
private val stipulationRepository: StipulationRepository, private val stipulationRepository: StipulationRepository,
private val stipulationAgreeRepository: StipulationAgreeRepository, private val stipulationAgreeRepository: StipulationAgreeRepository,
private val memberNotificationService: MemberNotificationService,
private val s3Uploader: S3Uploader, private val s3Uploader: S3Uploader,
private val validator: SignUpValidator, private val validator: SignUpValidator,
private val tokenProvider: TokenProvider, 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( private fun login(
email: String, email: String,
password: String, password: String,

View File

@ -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<MemberNotification, Long>, 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()
}
}

View File

@ -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
}
}
}

View File

@ -0,0 +1,7 @@
package kr.co.vividnext.sodalive.member.notification
data class UpdateNotificationSettingRequest(
val live: Boolean?,
val message: Boolean?,
val uploadContent: Boolean?
)