프로필 수정 API
This commit is contained in:
@@ -3,6 +3,8 @@ package kr.co.vividnext.sodalive.member
|
||||
import com.amazonaws.services.s3.model.ObjectMetadata
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||
import kr.co.vividnext.sodalive.can.payment.CanPaymentService
|
||||
import kr.co.vividnext.sodalive.can.use.CanUsage
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.jwt.TokenProvider
|
||||
@@ -16,6 +18,8 @@ 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.myPage.MyPageResponse
|
||||
import kr.co.vividnext.sodalive.member.nickname.NicknameChangeLog
|
||||
import kr.co.vividnext.sodalive.member.nickname.NicknameChangeLogRepository
|
||||
import kr.co.vividnext.sodalive.member.notification.MemberNotificationService
|
||||
import kr.co.vividnext.sodalive.member.notification.UpdateNotificationSettingRequest
|
||||
import kr.co.vividnext.sodalive.member.signUp.SignUpRequest
|
||||
@@ -25,6 +29,8 @@ import kr.co.vividnext.sodalive.member.stipulation.StipulationAgree
|
||||
import kr.co.vividnext.sodalive.member.stipulation.StipulationAgreeRepository
|
||||
import kr.co.vividnext.sodalive.member.stipulation.StipulationIds
|
||||
import kr.co.vividnext.sodalive.member.stipulation.StipulationRepository
|
||||
import kr.co.vividnext.sodalive.member.tag.MemberCreatorTag
|
||||
import kr.co.vividnext.sodalive.member.tag.MemberTagRepository
|
||||
import kr.co.vividnext.sodalive.member.token.MemberTokenRepository
|
||||
import kr.co.vividnext.sodalive.utils.generateFileName
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
@@ -53,7 +59,10 @@ class MemberService(
|
||||
private val creatorFollowingRepository: CreatorFollowingRepository,
|
||||
private val blockMemberRepository: BlockMemberRepository,
|
||||
private val signOutRepository: SignOutRepository,
|
||||
private val nicknameChangeLogRepository: NicknameChangeLogRepository,
|
||||
private val memberTagRepository: MemberTagRepository,
|
||||
|
||||
private val canPaymentService: CanPaymentService,
|
||||
private val memberNotificationService: MemberNotificationService,
|
||||
|
||||
private val s3Uploader: S3Uploader,
|
||||
@@ -107,6 +116,13 @@ class MemberService(
|
||||
)
|
||||
}
|
||||
|
||||
fun getMember(id: Long, container: String): ProfileResponse {
|
||||
val member = repository.findByIdOrNull(id)
|
||||
?: throw SodaException("없는 사용자 입니다.")
|
||||
|
||||
return ProfileResponse(member, cloudFrontHost, container)
|
||||
}
|
||||
|
||||
fun getMemberInfo(member: Member, container: String): GetMemberInfoResponse {
|
||||
return GetMemberInfoResponse(
|
||||
can = member.getChargeCan(container) + member.getRewardCan(container),
|
||||
@@ -406,6 +422,130 @@ class MemberService(
|
||||
signOutRepository.save(signOut)
|
||||
}
|
||||
|
||||
fun getChangeNicknamePrice(memberId: Long): GetChangeNicknamePriceResponse {
|
||||
return repository.getChangeNicknamePrice(memberId = memberId)
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun updateNickname(profileUpdateRequest: ProfileUpdateRequest, user: User) {
|
||||
if (profileUpdateRequest.email != user.username) {
|
||||
throw SodaException("로그인 정보를 확인해 주세요.")
|
||||
}
|
||||
|
||||
val member = repository.findByEmail(user.username) ?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
if (profileUpdateRequest.nickname != null) {
|
||||
validateNickname(profileUpdateRequest.nickname)
|
||||
repository.findByNickname(profileUpdateRequest.nickname)
|
||||
?.let { throw SodaException("이미 사용중인 닉네임 입니다.") }
|
||||
|
||||
val price = repository.getChangeNicknamePrice(memberId = member.id!!).price
|
||||
if (price > 0) {
|
||||
canPaymentService.spendCan(
|
||||
memberId = member.id!!,
|
||||
needCan = price,
|
||||
canUsage = CanUsage.CHANGE_NICKNAME,
|
||||
container = profileUpdateRequest.container
|
||||
)
|
||||
}
|
||||
|
||||
val nicknameChangeLog = NicknameChangeLog(prevNickname = member.nickname)
|
||||
nicknameChangeLog.member = member
|
||||
nicknameChangeLogRepository.save(nicknameChangeLog)
|
||||
|
||||
member.nickname = profileUpdateRequest.nickname
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun profileUpdate(profileUpdateRequest: ProfileUpdateRequest, user: User): ProfileResponse {
|
||||
if (profileUpdateRequest.email != user.username) {
|
||||
throw SodaException("로그인 정보를 확인해 주세요.")
|
||||
}
|
||||
|
||||
val member = repository.findByEmail(user.username) ?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
if (profileUpdateRequest.modifyPassword != null) {
|
||||
if (passwordEncoder.matches(profileUpdateRequest.password, member.password)) {
|
||||
validatePassword(profileUpdateRequest.modifyPassword)
|
||||
member.password = passwordEncoder.encode(profileUpdateRequest.modifyPassword)
|
||||
} else {
|
||||
throw SodaException("비밀번호가 일치하지 않습니다.")
|
||||
}
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.gender != null) {
|
||||
member.gender = profileUpdateRequest.gender
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.nickname != null) {
|
||||
validateNickname(profileUpdateRequest.nickname)
|
||||
repository.findByNickname(profileUpdateRequest.nickname)
|
||||
?.let { throw SodaException("이미 사용중인 닉네임 입니다.") }
|
||||
member.nickname = profileUpdateRequest.nickname
|
||||
}
|
||||
|
||||
val tags = if (!profileUpdateRequest.removeTags.isNullOrEmpty()) {
|
||||
member.tags.filter { !profileUpdateRequest.removeTags.contains(it.tag.tag) }
|
||||
} else {
|
||||
member.tags
|
||||
}.toMutableList()
|
||||
|
||||
if (!profileUpdateRequest.insertTags.isNullOrEmpty()) {
|
||||
val accountCounselorTags = memberTagRepository.findByMember(member).map { it.tag }
|
||||
profileUpdateRequest.insertTags.forEach {
|
||||
val tag = memberTagRepository.findByTag(it)
|
||||
if (tag != null && !accountCounselorTags.contains(tag)) {
|
||||
tags.add(MemberCreatorTag(member, tag))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tags != member.tags) {
|
||||
member.tags.clear()
|
||||
member.tags.addAll(tags)
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.introduce != null) {
|
||||
member.introduce = profileUpdateRequest.introduce
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.youtubeUrl != null) {
|
||||
member.youtubeUrl = profileUpdateRequest.youtubeUrl
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.instagramUrl != null) {
|
||||
member.instagramUrl = profileUpdateRequest.instagramUrl
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.websiteUrl != null) {
|
||||
member.websiteUrl = profileUpdateRequest.websiteUrl
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.blogUrl != null) {
|
||||
member.blogUrl = profileUpdateRequest.blogUrl
|
||||
}
|
||||
|
||||
return ProfileResponse(member, cloudFrontHost, profileUpdateRequest.container)
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun profileImageUpdate(multipartFile: MultipartFile, user: User): String {
|
||||
val member = repository.findByEmail(user.username) ?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
val metadata = ObjectMetadata()
|
||||
metadata.contentLength = multipartFile.size
|
||||
|
||||
member.profileImage = s3Uploader.upload(
|
||||
inputStream = multipartFile.inputStream,
|
||||
bucket = s3Bucket,
|
||||
filePath = "profile/${member.id}/${generateFileName(prefix = "${member.id}-profile")}",
|
||||
metadata = metadata
|
||||
)
|
||||
|
||||
return "$cloudFrontHost/${member.profileImage!!}"
|
||||
}
|
||||
|
||||
private fun getOrCreateLock(memberId: Long): ReentrantReadWriteLock {
|
||||
return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() }
|
||||
}
|
||||
|
Reference in New Issue
Block a user