회원가입 후 초기 알림설정 기능 추가
This commit is contained in:
parent
53a64d9bd7
commit
ac09de9141
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package kr.co.vividnext.sodalive.member.notification
|
||||
|
||||
data class UpdateNotificationSettingRequest(
|
||||
val live: Boolean?,
|
||||
val message: Boolean?,
|
||||
val uploadContent: Boolean?
|
||||
)
|
Loading…
Reference in New Issue